参考
具体做法
由于本人目前开发的项目,几乎所有的页面显示都是基于ajax请求,所以,不让系统变复杂,取一个简单方式来实现。
- 后台
权限拦截器检查session为空的时候,添加reponse头,用来作为标记
//2.拦截未登录操作
HttpSession session = request.getSession();
User user=UserSessionUtil.getCurrentUser(session);
if(user==null){
response.setHeader("sessionstatus", "timeout");
//throw n``ew SessionNullException("用户未登录");
return false;
}
- 前台
全局范围内,每次ajax请求结束,都会进行读取请求头,判断是否有用户session为空的情况
/**
* session 丢失,重定向到登录页面,具体过程:
* 权限拦截器rightIngerceptor拦截到用户session丢失,就会在reponse头添加一个sessionstatus:timeout,
* 每次ajax请求后都会执行以下函数,从而实现sesion丢失后重定向问题
*/
$.ajaxSetup({
contentType:"application/x-www-form-urlencoded;charset=utf-8",
complete:function(XMLHttpRequest,textStatus){
console.log("sesssion");
var sessionstatus=XMLHttpRequest.getResponseHeader("sessionstatus"); //通过XMLHttpRequest取得响应头,sessionstatus,
if(sessionstatus=="timeout"){
warn_dialog("登录时间过长,请重新登录!","small-dialog");
//如果超时就处理 ,指定要跳转的页面
setTimeout(function(){
window.location.replace("${ContextPath}/welcome/toHomePage");
},2000);
}
}
});