前言
上篇博客针对EasyUI+SpringMvc配置session过期跳转页面做了介绍,但是在运用过程中会出现在IE8中有时候不能正常使用的情况,也会出现和导入的操作冲突问题,经过一系列的探索发现这种方法针对不同浏览器尤其是IE会出现瑕疵,而且很难找到问题的所在,所以就又通过filter机制来完善了一下此功能。
具体filter的机制的就不再过多介绍,咱们直接进入主题,来看看怎么进行配置完成此功能。
问题分析
由于用的是EasyUI,所以会有很多异步的请求,所以就需要解决两种问题:一是普通的http请求的session超时处理,另一种是异步的session超时处理,这两种情况都通过filter来实现。
在写filter之前要清楚,这两种请求的区别就是普通的http请求的header参数中没有x-requested-with:XMLHttpRequest头信息,而异步的有。
Filter编写
所以filter就会变成这种:
account is session.accountattr;
account is null --> go to if else logic
-->If requestheader is x-requested-with
-->if urls can pass then dofilter,
-->else response.setheader,attribute is sessionstatus ,value is timeout 【在此处特别注意,如果是easyui等有tab标签的这种,需要在这里通过response打印一句话,并且注意writer关闭的问题,主要是为了能够在session过期时,tab标签中也能够跳转到相应页面中】。
-->If requestheader is not x-requested-with --> response sendredirects to loginpage.
account is not null 直接dofilter,go on。
JS监听
$.ajaxSetup({
error: function (XMLHttpRequest, textStatus, errorThrown){
if(XMLHttpRequest.status==403){
alert('您没有权限访问此资源或进行此操作');
return false;
}
},
complete:function(XMLHttpRequest,textStatus){
try{
var sessionstatus=XMLHttpRequest.getResponseHeader("sessionstatus");
if(sessionstatus=='timeout'){
var top = getTopWinow();
alert('登录超时, 请重新登录.');
top.location.href=path+"/login.jsp";
}
}
}catch(e){
}
});
特别注意此处try catch语句不能省略,在ie8中easyui的跳转会和导入有冲突,会影响导入的成功。
web.XML编写
最后就是配置web.XML的filter,此处主要是配置filter的pararm,这里可以填写能够通过的urls,此urls在逻辑中有所体现。
总结
通过这三步配置就会完美的完成session过期跳转页面了。本功能的具体代码会上传到代码库中随后供大家下载。