0

サーブレット フィルターを使用して、Web アプリで実行されている JSF アプリケーション内でキャッチされないセッション タイムアウト エラーのキャッチを実装しようとしています。コードはかなり単純です (以下を参照)。フィルターが ServletException をキャッチすると、それが RuntimeException であるかどうかを確認します。そうである場合は、セッションの有効期限が切れているかどうかを確認します。その場合、エラーをタイムアウト エラーとして扱い、要求を /errorpage_viewexpired.jsp に転送します。このコードは、ローカル PC で完全に機能します。しかし、QA ボックスで実行すると、ユーザーが /errorpage_viewexpired.jsp に移動することがあります。ただし、ほとんどの場合、null という単語が表示された空白の画面が表示されます。私の地元では起こっていないので、私は困惑しています。

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    try {
        chain.doFilter(request, response);
    } 
    catch (ServletException e) {
       Throwable rootCause = e.getRootCause();
       if (rootCause instanceof RuntimeException) { // Catch jsf exception.
           if (isSessionExpired(request)) {
               RequestDispatcher dispatcher = request.getRequestDispatcher("/errorpage_viewexpired.jsp");
               dispatcher.forward(request, response);
           }
           else {
               rootCause.printStackTrace();
               RequestDispatcher dispatcher = request.getRequestDispatcher("/errorpage_throwable.jsp?log=N");
               dispatcher.forward(request, response);
           }
       } 
       else {
           throw e;
       }
    }
}
4

0 に答える 0