Ajax请求session超时解决办法
问题描述
通过ajax发送请求,被后台过滤器或者拦截器拦截的时候,如果session超时,不会直接跳转到登录页面。
解决方案
在过滤器或者拦截器中设置response的session状态,在前端js中实现跳转
具体实现
在filter中
//判断是否为ajax请求,默认不是
boolean isAjaxRequest = false;
if(!StringUtil.isBlank(request.getHeader("x-requested-with")) && request.getHeader("x-requested- with").equalsIgnoreCase("XMLHttpRequest")){
isAjaxRequest = true;
}
如果是ajax请求并且session过期,设置返回session状态
HttpSession session = request.getSession(false);
if (isAjaxRequest && session == null){
response.setHeader("sessionstatus", "timeout");
logger.info("ajax请求session过期");
return;
}
$.ajax({
type: "POST",
url: controllerTitle + "/callAgent/monitor",
dataType:'json',
data:{
"selectMonth":selectMonth,
"tenancyId":tenancyIdValue,
"organizationId":organizationIdValue,
"departmentId" :departmentIdValue,
"agentCallType":agentCallType
},
success: function(msg) {
}
error: function(XMLHttpRequest, textStatus, errorThrown) {
var sessionstatus = XMLHttpRequest.getResponseHeader("sessionstatus");
// 通过XMLHttpRequest取得响应头,sessionstatus,
if(sessionstatus == "timeout"){
window.location.replace("Login.jsp");
}else {
alert("ajax请求出现异常");
}
}
});