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