后台在session失效时会往responseHeader里添加一个sessionstatus的属性,值为timeout,还会设置重新跳转登录页面的地址redirectUrl
代码
if (httpRequest.getHeader("x-requested-with") != null
&& httpRequest.getHeader("x-requested-with").equals("XMLHttpRequest")) { // ajax请求
httpResponse.setHeader("sessionstatus", "timeout");
httpResponse.setHeader("redirectUrl", url_redirect);
} else {
httpResponse.sendRedirect(url_redirect);
}
前端如果用到axios,需要给requestHeader配置x-requested-with属性,值为XMLHttpRequest,主要是为了配合后端设置sessionstatus=timeout
axios配置代码
axios.interceptors.request.use(config => {
if (true) {
config.headers.common["X-Requested-With"] = "XMLHttpRequest";
}
return config;
},
err => Promise.reject(err)
);
axios.interceptors.response.use(config => {
console.log(config.headers);
if (config.headers["sessionstatus"]) {
// config.headers.common["X-Requested-With"] = "XMLHttpRequest";
console.log(config.headers["sessionstatus"]);
console.log("過期");
window.location = config.headers["redirectUrl"];
//这里直接跳转后端设置的登录页面地址
}
else {
console.log("未過期");
}
return config;
},
err => Promise.reject(err)
);
ajax配置代码
$(function () {
$.ajaxSetup({
complete:function(XMLHttpResponse,textStatus){
var sessionstatus = XMLHttpResponse.getResponseHeader("sessionstatus");
if (sessionstatus == "timeout") {
// 这里怎么处理在你,这里跳转的登录页面
window.location.replace(XMLHttpResponse.getResponseHeader("redirectUrl"));
}
}
});
})
// 这个$(function(){})是为了让ajaxSetup配置执行一遍,后续ajax才会使用这些配置
这两段配置都写成了单独的js文件
引入jq和axios后再引入这两个配置文件就行了
上面有些打印语句和没必要的判断大家可以自己去掉,先这样,下次见