IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [原]Filter配置会话超时跳转页面

    lfsf802发表于 2015-08-30 19:34:15
    love 0

    前言

       上篇博客针对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过期跳转页面了。本功能的具体代码会上传到代码库中随后供大家下载。
    


沪ICP备19023445号-2号
友情链接