登录过期时,拦截器拦截到ajax请求无法跳转到登录页面处理方案

一.后台拦截器处理
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
【登录过期时,拦截器拦截到ajax请求无法跳转到登录页面处理方案】
//session拦截
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8")

Objectuser = request.getSession().getAttribute("user");
if(user != null) {
return true;
}else{
// 未登录
if (INDEX_PATH.equals(requestUrl)||INDEX_PATH_DEFAULT.equals(requestUrl)) {
response.sendRedirect(request.getContextPath() + "/login");
} else {
if (request.getHeader("x-requested-with") != null && request.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")){
//如果是ajax请求响应头会有x-requested-with,自定义707状态码为ajax登录过期
response.setStatus(707);
PrintWriter out = response.getWriter();
out.print(request.getContextPath() + "/overtime");
out.flush();
}else {
response.sendRedirect(request.getContextPath() + "/overtime");
}
return false;
}
}
二.使用 jQuery.ajaxSetup() 方法设置全局 AJAX请求response状态码为自定义的707时,执行以下方法,不执行原本的success function()。
在个页面都引用的jQuery.js末端加以下代码
jQuery.ajaxSetup({
statusCode:{
707:function(data){
window.parent.location.href=https://www.it610.com/article/data.responseText;
}
}
})


    推荐阅读