之前在反馈里提问这个问题,问题传送门。
得到朋友们的大力相助,结合朋友们的建议,现实现如下:
后端验证是否登录或则是否登录过期的拦截器:
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。