忙了一个晚上,终于解决了EXTJS中的session超时后登录问题

前段时间,就搜到一篇介绍如何控制EXTJS中SESSION超时的文章,偏就没有一次搞定,现把自己整理的经验整理出来,代码如下:

第一步:

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

 

HttpSession session = request.getSession(false);

if (session == null || session.getAttribute("user") == null) {

if (request.getHeader("x-requested-with") != null
      && request.getHeader("x-requested-with").equalsIgnoreCase(
        "XMLHttpRequest")) {
     response.setHeader("sessionstatus", "timeout");
    }

}

 

 

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

 

<filter>
       <filter-name>AuthFilter</filter-name>
       <filter-class>com.vectorsoft.util.SessionCheckFilter</filter-class>
</filter>
  
<filter-mapping>
       <filter-name>AuthFilter</filter-name>
       <url-pattern>*.jsp</url-pattern>
</filter-mapping>

 

第二步:

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

Ext.onReady(function(){	

    Ext.QuickTips.init();

    Ext.Ajax.on('requestcomplete',checkUserSessionStatus, this);  
    function checkUserSessionStatus(conn,response,options){  
        var sessionStatus = response.getResponseHeader("sessionstatus");
        if(typeof(sessionStatus) != "undefined"){  
            Ext.Msg.alert('提示', '会话超时,请重新登录!', function(btn, text){
	if (btn == 'ok'){
	    var redirect = '../LogoutAction';
	    window.location = redirect;
	}
             });
         }  
    };
//其它代码......
}

 

在完成上面两步后,基本上就已经实现了EXTJS的SESSION的超时控制,并可以顺利让用户转向登录页.

你可能感兴趣的:(Ajax,jsp,Web,xml,ext)