分享

ExtJs J2EE的Session过时请求(Timeout)的处理

 yfm10 2010-05-30

ExtJs J2EE的Session过时请求(Timeout)的处理

发布时间: 2009-11-11 00:00

在JOffice(OA)中,我们的应用程序是属于那种One Application One Page,所有的请求都是都可以说是通过Ext.data.Connection来处理的,因此可以在这里做一个特别的处理,当session timeout时,让程序直接跳至登录页。或弹出一个登录的窗口,两种方式均可。

 

JOffice(OA)中的安全采用了Spring Security 2,即用户在未登录或session过期中,其访问的地址就会被转移至login.jsp,配置如下所示:

 

Java代码
  1. <http auto-config="true" access-denied-page="/403.jsp" lowercase-comparisons="true" >   
  2.  <form-login default-target-url="/index.jsp" login-page="/login.jsp" authentication-failure-url="/login.jsp?error=true" login-processing-url="/j_security_check" />  
  3.     
  4.         <logout logout-url="/j_logout.do" logout-success-url="/login.jsp"/>   
  5.           
  6.         <remember-me key="RememberAppUser"/>  
  7.     </http>  

 那么,当页面跳至login.jsp时,我们在该页面设置一个Response Header告诉浏览器,该用户的session已经timeout,代码如下所示:

Java代码
  1. <%  
  2.         response.addHeader("__timeout","true");  
  3.     %>  

 而剩下的就是处理该标识:

 

代码如下:

Java代码
  1. Ext.onReady(){  
  2.         Ext.util.Observable.observeClass(Ext.data.Connection);  
  3.     Ext.data.Connection.on('requestcomplete', function(conn, resp,options ){  
  4.         if (resp && resp.getResponseHeader && resp.getResponseHeader('__timeout')) {  
  5.             window.location.href=__ctxPath+'/login.jsp';  
  6.         }  
  7.     });  
  8. }  

 

说明:

Connection的这个requestcomplete事件是所有的Ajax请求都必须触发的,所以把它作为总的入口。

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多