0

Tomcat の web.xml でフォームベースの認証を使用しています。

<login-config> 
<auth-method>FORM</auth-method> 
<realm-name>Example Form-Based Authentication Area</realm-name> 
<form-login-config> 
<form-login-page>/LoginServlet</form-login-page> 
<form-error-page>/LoginServlet</form-error-page> 
</form-login-config> 
</login-config>

私の WebApp には、「Action.jsp」ページとフィルター (MyFilter.java) があります。ユーザー名とセッション ID の値を MyFilter に出力しています。セッションがタイムアウトすると、ページ action.jsp が開かれ、フィルター ログにユーザー名が null として表示されます。ただし、ログインページにはリダイレクトされません。何が問題なのですか?

LoginServlet は単にログイン ページにリダイレクトします。

 response.sendRedirect(response
              .encodeRedirectURL("/WebFwCore/web/pages/main.jsp"));

そしてフィルターで私は印刷しています

 request.getRemoteUser();
    request.isUserInRole('something');

これはnullになり、web.xmlになります

               <web-resource-name>View pages</web-resource-name>
                        <url-pattern>/jsp/ann/ann_main.jsp</url-pattern>
                        <url-pattern>/jsp/ann/ann_tcu.jsp</url-pattern>
                        <url-pattern>/jsp/ann/import_ann_files.jsp</url-pattern>
                        <url-pattern>/jsp/dtmf/dtmf.jsp</url-pattern>
                        <url-pattern>/jsp/languagetah/languagetag.jsp</url-pattern>
                        <url-pattern>/jsp/languagetah/action.jsp</url-pattern>
                        <url-pattern>/jsp/languagetah/languagetag_load_result.jsp</url-pattern>
                        <url-pattern>/jsp/languagetah/languagetag_load_error_detail.jsp</url-pattern>
                        <url-pattern>/jsp/tone/tone.jsp</url-pattern>
                </web-resource-collection>
        <auth-constraint>
                <role-name>fsNetworkingView</role-name>
                <role-name>fsNetworkingManage</role-name>
                <role-name>fsWebUIAllowAll</role-name>
        </auth-constraint>
4

1 に答える 1

0

LoginServletで

  • Requestを使用してセッションを確認しますrequest.getSession(false);

  • セッションがnullの場合、ログインページにリダイレクトします

  • リクエストは(認証とともに)新鮮である可能性がありますが、セッションがバインドされている以前のリクエストが期限切れになっている可能性があるため、リクエストを調べる前に必ずセッションを確認してください

  • または、セッションリスナーを使用して、セッションの有効期限を取得し、アプリの要求に応じて適切に動作させることができます。

于 2013-02-06T11:32:57.043 に答える