解决方案 »

  1.   

    附上代码web.xml
      <session-config> 
    <session-timeout>2</session-timeout>    
      </session-config>
      <servlet>
        <display-name>DWR Servlet</display-name>
        <servlet-name>dwr-invoker</servlet-name>
        <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
        <init-param>
          <param-name>debug</param-name>
          <param-value>true</param-value>
        </init-param>
        <init-param>
        <param-name>crossDomainSessionSecurity</param-name>
        <param-value>false</param-value>
    </init-param>
    <init-param>  
        <param-name>org.directwebremoting.extend.Remoter</param-name>  
        <param-value>com.accela.aad.client.SessionTimeOutService</param-value>  
    </init-param>
      </servlet>
      <servlet-mapping>
        <servlet-name>dwr-invoker</servlet-name>
        <url-pattern>/dwr/*</url-pattern>
      </servlet-mapping>SessionTimeOutService.class如下:
    public class SessionTimeOutService extends DefaultRemoter {


    public Replies execute(Calls calls) {  
      
    HttpSession session = WebContextFactory.get().getSession();
    boolean rs =session.getAttribute("XXXXX");
            if (!rs) {  
                doLogout();  
                return super.execute(new Calls());  
            }  
      
            return super.execute(calls);  
        }  
      
        private void doLogout() {  
            WebContext wct = WebContextFactory.get();  
         Util utilThis = new Util(wct.getScriptSession());  
         utilThis.addScript(new ScriptBuffer("sessionLogout()"));  
      
        }
    }
      

  2.   

    1、还记得 这个吗?  所有以/dwr开头的请求 都是dwr请求的;
    <servlet-mapping>
      <servlet-name>dwr-invoker</servlet-name>
      <url-pattern>/dwr/*</url-pattern>
    </servlet-mapping>2、找到突破点,我们可以写个过滤器 拦截/dwr/* 
    1、如果是登录dwr请求我们就跳过
    2、然后判断session是否过期 
      

  3.   


    所有的dwr请求是servlet中运行,包括登陆请求,按你的意思是如果是登陆的跳过那不就登陆不了吗?请问这个过滤器该如何过滤?