Knight of the round table

wansong

session 超时问题处理 ajax(Extjs)

2009-11-26

Extjs session 超时问题处理

关键字: extjs session 超时问题处理

对于普通的http请求,可以通过过滤器Filter来判断session超时,然后跳转到登录页面;但是对于Ajax请求,则不会如期待的那样自动转到登录页面(我试了网站上的许多种方案,都是停留在当前页面),好不容易找一篇,但是代码还是有点问题,不能运行,自己修改了下,并测试通过,所以拿出来分享下。
不论是普通http请求还是ajax请求,都可以通过过滤器/拦截器来将请求捕获,而且区分这两种请求在于头部信息的不同:普通http请求的header参数中没有x-requested-with:XMLHttpRequest头信息,而异步的有。

 

自己定义一个Filter,然后在doFilter()中加如下代码:

Java代码 复制代码
  1. if (request.getHeader("x-requested-with") != null     
  2.         && request.getHeader("x-requested-with").equalsIgnoreCase(    //ajax超时处理      
  3.                 "XMLHttpRequest")) {      
  4.     response.addHeader("sessionstatus""timeout");      
  5. }else{//http超时的处理      
  6. }    

  

再在WEB.XML文件中配置这个Filter,并且要放在STRUTS2的StrutsPrepareAndExecuteFilter前面,相关代码:

Xml代码 复制代码
  1. <filter>      
  2.        <filter-name>xxxFilter</filter-name>      
  3.        <filter-class>xx.xxx.xxx.xxxxFilter</filter-class>      
  4. </filter>      
  5.         
  6. <filter-mapping>      
  7.        <filter-name>xxxFilter</filter-name>      
  8.        <url-pattern>*.jsp</url-pattern>      
  9. </filter-mapping>    

 

在每个功能JS中添加代码:

 

Js代码 复制代码
  1. Ext.Ajax.on('requestcomplete',checkUserSessionStatus, this);    
  2. function checkUserSessionStatus(conn,response,options) {      
  3.      
  4. var sessionStatus = response.getResponseHeade["sessionstatus"];    
  5.            
  6.         if(typeof(sessionStatus) != "undefined"){        
  7.             Ext.Msg.alert('提示''会话超时,请重新登录!'function(btn, text){      
  8.                 if (btn == 'ok'){      
  9.                     var redirect = 'http://localhost:8080/项目名/login.jsp';      
  10.                     window.location = redirect;      
  11.                 }      
  12.             });      
  13.          }        
  14. }     

posted on 2010-10-14 13:12 w@ns0ng 阅读(2792) 评论(0)  编辑  收藏 所属分类: J2EEJava Securityjavascript html


只有注册用户登录后才能发表评论。


网站导航: