AJAX,SpringMVC,拦截器(Ajax发送请求 经过SpringMVC拦截器重定向其他页面失败)

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;
  }
        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值