2016-08-17 11 views
1

初めてアプリケーションを起動すると、sessionExpiredページが呼び出されます。それを防ぐ方法を教えてもらえますか?アプリケーションに入ると、セッションのタイムアウト後に期限切れとなります。私はtiles.xmlを使用しています。Java Session Timeout - 初めてアプリケーションを起動すると、セッションの期限切れメッセージが表示されます。

<!--Session Expired Page --> 
    <definition name="sessionExpired" extends="login.definition"> 
     <put-attribute name="information" value="" /> 
     <put-attribute name="body" value="/WEB-INF/jsp/sessionExpired.jsp" /> 
    </definition> 
<!--End of Session Expired Page --> 

web.xmlの

<session-config> 
    <session-timeout>1</session-timeout> 
</session-config> 
<filter> 
    <filter-name>SessionFilter</filter-name> 
    <filter-class>com.Filter.SessionFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>SessionFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

SessionFilter

public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) 
      throws IOException, ServletException { 

     HttpServletRequest request = (HttpServletRequest) req; 
     HttpServletResponse response = (HttpServletResponse) res; 

     HttpSession session = request.getSession(false); 

     if (session != null) { 
      long currentTime = System.currentTimeMillis()/1000; 
      long lastSessionAccessedTime = session.getLastAccessedTime()/1000; 
      int inactiveInterval = (int) currentTime -lastSessionAccessedTime); 

      if (inactiveInterval > session.getMaxInactiveInterval()) { 
       RequestDispatcher rd = request.getRequestDispatcher("/sessionExpired"); 
       rd.forward(request, response); 
      } else { 
       chain.doFilter(request, response); 
      } 
     } else { 
      RequestDispatcher rd = request.getRequestDispatcher("/sessionExpired"); 
      rd.forward(request, response); 
     } 
    } 

答えて

0

tiles.xml

はweb.xmlに数分で

<session-config> 
    <session-timeout> 
     ${somevalue} 
    </session-timeout> 
</session-config> 
'をsomeValueの' を設定してください
+0

私は1分に設定しています。しかし、それは問題ではありません。アプリケーションの起動中にsessionExpiredページが表示されないようにする方法を知りたいです。 – user5776462

1

シナリオは同じです - 起動時または新しいセッションに - セッションで== nullの

起動時に以前のすべてのセッションが無効化されますので、のsessionExpiredに送らなっている、

新しいセッションと同じ

要件に依存しますが、tomcatの永続セッションを参照したい場合があります

+0

さて、私は永続的なセッションを調べます。ありがとうございました! – user5776462

0

セッションが期限切れになっています。期限切れのページは次のコードで期限切れのセッションとセッションが作成されていない場合にnullを返します。

HttpSession session = request.getSession(false); 

、アプリケーションの起動時に何のセッションが作成されていないとして、それはnullを返します。

新しいセッションと期限切れのセッションに別のロジックを使用することをお勧めします。期限切れのセッションをチェックする方法の一つは、次のとおりです。

if (request.getRequestedSessionId() != null 
      && !request.isRequestedSessionIdValid()) { 
     // Session is expired  
    } 

以下のようなものが要求が新しい場合セッションがページを期限切れ回避します:

public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) 
     throws IOException, ServletException { 

    HttpServletRequest request = (HttpServletRequest) req; 
    HttpServletResponse response = (HttpServletResponse) res; 

    HttpSession session = request.getSession(false); 

    if (session != null) { 
     long currentTime = System.currentTimeMillis()/1000; 
     long lastSessionAccessedTime = session.getLastAccessedTime()/1000; 
     int inactiveInterval = (int) currentTime -lastSessionAccessedTime); 

     if (inactiveInterval > session.getMaxInactiveInterval()) { 
      RequestDispatcher rd = request.getRequestDispatcher("/sessionExpired"); 
      rd.forward(request, response); 
     } else { 
      chain.doFilter(request, response); 
     } 
    } else if(expiredSession(request)){ 
     RequestDispatcher rd = request.getRequestDispatcher("/sessionExpired"); 
     rd.forward(request, response); 
    } 
} 

private boolean expiredSession(HttpServletRequest request){ 
     if (request.getRequestedSessionId() != null 
       && !request.isRequestedSessionIdValid()) { 
      return true; 
     }  
     return false; 
} 
+0

初めてアプリケーションを実行しているときに、 'request.getRequestedSessionId()!= null &&!request.isRequestedSessionIdValid()'条件は真です。再度、ログインページの代わりにsessionExpiredページに移動します。 – user5776462

関連する問題