调整起因:当用户处于应用登录后的界面内时,项目重启后未重新登录而直接发起ajax请求不能转至登录
页面,界面不友好用户未看到系统响应
解决方案:
a.后端:在拦截器处进行AJAX请求过滤完成处理。发现Session不存在后,返回对$.ajaxSetup({})请求的响应。部分代码如下:
LsUser user = (LsUser) session.getAttribute("user");
if(ValidateUtil.isEmpty(user)){//session过期
String ajaxSubmit = request.getHeader("X-Requested-With");
if(ajaxSubmit != null && ajaxSubmit.equals("XMLHttpRequest")){
//AJAX_TIMEOUT
PrintWriter printWriter = response.getWriter();
printWriter.print("AJAX_TIMEOUT");
printWriter.flush();
printWriter.close();
}else{
//UN_AJAX_TIMEOUT
response.sendRedirect("/project/views/return");
}
}
b.前端:发起AJAX请求前先发送$.ajaxSetup({})请求。当发现Session过期后,跳转到指定页面。部分代码如下:
$.ajaxSetup({
type : 'POST',
dataFilter : function(data, type) {
if (data == "AJAX_TIMEOUT" || data == "[object XMLDocument]") {
var top = window;
while (top != top.parent) {
top = top.parent;
}
$.toast("登录已超时,请重新登录","forbidden");
top.location.href="${path}/views/return";
}else{
return data;
}
}
})
状态:已实现。