前后端完全分离下,拦截请求,跳转到登录页面

问题描述:

  在前后端完全分离下架构下,大部分数据请求都是通过Ajax异步获取的,如果session过期,拦截Ajax请求,跳转到登录页面(重定向,转发在Ajax请求下,是不可用的)

解决方案:

  1. 后台代码:
    在过滤器或者拦截器中,拦截不符合要求的session请求
String type = request.getHeader("X-Requested-With");// XMLHttpRequest     HttpServletRequest -> request
            if ("XMLHttpRequest".equals(type)) {
                //是ajax请求
                // 异步请求下的重定向
                response.addHeader("FLAG", "-1");
                response.setHeader("SESSIONSTATUS", "TIMEOUT");
                response.setHeader("CONTEXTPATH", php_Address);//重定向目标地址
                response.setStatus(1000);
            } else {
            	//非ajax请求,直接使用重定向
                response.sendRedirect(php_Address);
            }

Spring MVC架构中的监听器,过滤器,拦截器参考

  1. 修改ajax请求后的结束动作

对jQuery文件添加如下函数

$.ajaxSetup({
 //设置ajax请求结束后的执行动作
    complete: function (XMLHttpRequest, textStatus) {
        var url = XMLHttpRequest.getResponseHeader("CONTEXTPATH");
        var flag = XMLHttpRequest.getResponseHeader("FLAG");
        if (flag != "" && flag == "-1") {/*  console.log(url);*/
            window.location.href = url;
        }/* console.log(flag);console.log("1231");*/
    }
});
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值