Ajax发送请求 经过SpringMVC拦截器重定向其他页面失败
借鉴出处
Ajax是通过异步请求后台,获取数据,局部刷新页面,因此,即使后台进行页面跳转的编码,前台请求完毕以后,只会执行ajax的回调函数,后台执行的逻辑,拦截器虽然拦截处理器,但是不会进行页面重定向。
—— 解决方法
注意:ajaxSetup() 当js全局属性放置
<script type="text/javascript">
$.ajaxSetup( {
//设置ajax请求结束后的执行动作
complete :
function(XMLHttpRequest, textStatus) {
// 通过XMLHttpRequest取得响应头,sessionstatus
var sessionstatus = XMLHttpRequest.getResponseHeader("sessionstatus");
if (sessionstatus == "TIMEOUT") {
var win = window;
while (win != win.top){
win = win.top;
}
win.location.href= XMLHttpRequest.getResponseHeader("CONTEXTPATH");
}
}
});
</script>
~这段代码的含义,大抵就是,在 ajax请求完成以后,执行 complete 回调方法,里面进行一些逻辑的判断;
~这里判断 session 的状态,如果是超时被销毁了,则进行页面的跳转,跳到 CONTEXTPATH 的值那 ;
~session 的状态以及 CONTEXTPATH 的值,由我们后台同学定义;
注意:request.getHeader(“x-requested-with”)作用是: 判断Ajax请求是否是异步
HttpSession session = request.getSession();
String userSessionId = (String)session.getAttribute("userSessionId");
if(userSessionId == null || "".equals(userSessionId)) {
// 获取到项目名,以便下面进行重定向
String homeUrl = request.getContextPath();
// 如果是 ajax 请求,则设置 session 状态 、CONTEXTPATH 的路径值
// 如果是ajax请求响应头会有,x-requested-with
if (request.getHeader("x-requested-with") != null && request.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")){
response.setHeader("SESSIONSTATUS", "TIMEOUT");
response.setHeader("CONTEXTPATH", homeUrl+"/jsp/login.jsp");
// FORBIDDEN,forbidden。也就是禁止、403
response.setStatus(HttpServletResponse.SC_FORBIDDEN);
}else{
// 如果不是 ajax 请求,则直接跳转即可
response.sendRedirect(homeUrl+"/jsp/login.jsp");
}
return false;
}else{
System.out.println("通过拦截器 ... ");
return true;
}