之前在反馈里提问这个问题,问题传送门。
得到朋友们的大力相助,结合朋友们的建议,现实现如下:
后端验证是否登录或则是否登录过期的拦截器:
public class AccessAdminInterceptor implements Interceptor { public void intercept(Invocation inv) { Controller c = inv.getController(); HttpServletResponse response = c.getResponse(); Object obj = c.getSessionAttr("user"); if(obj==null){ //如果是ajax请求 if("XMLHttpRequest".equals(c.getRequest().getHeader("X-Requested-With"))){ //System.out.println("=============登录过期,设置Ajax重定向到登录界面==========="); //if (c.getRender() instanceof com.jfinal.render.JsonRender) { // c.renderJson(RetJson.by(-999, "尚未登录或则登录超时!")); //} //设置跳转地址 response.setHeader("redirectUrl", "/"); //设置跳转使能 response.setHeader("enableRedirect","true"); c.renderNull(); //这一句很重要,否则,后台会抛异常。说找不到指定的html。 }else { //c.redirect("/"); c.redirect301("/"); //c.forwardAction("/"); } }else{ inv.invoke(); } } }
前端redirect.js文件内容:
function redirectHandle(xhr) { var url = xhr.getResponseHeader("redirectUrl"); var enable = xhr.getResponseHeader("enableRedirect"); if((enable == "true") && (url != "")){ var win = window; while(win != win.top){ win = win.top; } win.location.href = url; } } $(function () { $(document).ajaxComplete(function (event, xhr, settings) { redirectHandle(xhr); }) })
然后在页面引入这个redirect.js文件。
就可以实现无侵入式实现ajax的redirect。