session 超時(shí)問題處理 ajax(Extjs)
2009-11-26
Extjs session 超時(shí)問題處理
關(guān)鍵字: extjs session 超時(shí)問題處理對于普通的http請求,可以通過過濾器Filter來判斷session超時(shí),然后跳轉(zhuǎn)到登錄頁面;但是對于Ajax請求,則不會如期待的那樣自動(dòng)轉(zhuǎn)到登錄頁面(我試了網(wǎng)站上的許多種方案,都是停留在當(dāng)前頁面),好不容易找一篇,但是代碼還是有點(diǎn)問題,不能運(yùn)行,自己修改了下,并測試通過,所以拿出來分享下。
不論是普通http請求還是ajax請求,都可以通過過濾器/攔截器來將請求捕獲,而且區(qū)分這兩種請求在于頭部信息的不同:普通http請求的header參數(shù)中沒有x-requested-with:XMLHttpRequest頭信息,而異步的有。
自己定義一個(gè)Filter,然后在doFilter()中加如下代碼:
- if (request.getHeader("x-requested-with") != null
- && request.getHeader("x-requested-with").equalsIgnoreCase( //ajax超時(shí)處理
- "XMLHttpRequest")) {
- response.addHeader("sessionstatus", "timeout");
- }else{//http超時(shí)的處理
- }
再在WEB.XML文件中配置這個(gè)Filter,并且要放在STRUTS2的StrutsPrepareAndExecuteFilter前面,相關(guān)代碼:
- <filter>
- <filter-name>xxxFilter</filter-name>
- <filter-class>xx.xxx.xxx.xxxxFilter</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>xxxFilter</filter-name>
- <url-pattern>*.jsp</url-pattern>
- </filter-mapping>
在每個(gè)功能JS中添加代碼:
- Ext.Ajax.on('requestcomplete',checkUserSessionStatus, this);
- function checkUserSessionStatus(conn,response,options) {
- var sessionStatus = response.getResponseHeade["sessionstatus"];
- if(typeof(sessionStatus) != "undefined"){
- Ext.Msg.alert('提示', '會話超時(shí),請重新登錄!', function(btn, text){
- if (btn == 'ok'){
- var redirect = 'http://localhost:8080/項(xiàng)目名/login.jsp';
- window.location = redirect;
- }
- });
- }
- }
posted on 2010-10-14 13:12 w@ns0ng 閱讀(2797) 評論(0) 編輯 收藏 所屬分類: J2EE 、Java Security 、javascript html