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

问题描述:

在前后端完全分离下架构下,大部分数据请求都是通过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架构中的监听器,过滤器,拦截器参考:https://blog.csdn.net/BigBug_500/article/details/94772729
2. 修改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");*/
    }
});

你可能感兴趣的:(Java-EE)