Filter配置会话超时跳转页面

来源:互联网 发布:例外女装淘宝 编辑:程序博客网 时间:2024/05/22 03:53

前言

   上篇博客针对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"); //通过XMLHttpRequest取得响应头,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过期跳转页面了。本功能的具体代码会上传到代码库中随后供大家下载。
0 0
原创粉丝点击