3

Java と Spring を使用して Web サイトを開発しています。サーバーとして、Tomcat 6.0.29 に基づくカスタム サーバーを使用しています。web.xml ファイルには、次のカスタム認証フィルターが宣言されています。

<security:custom-filter ref="extraFieldAuthenticationProvider"
        before="FORM_LOGIN_FILTER"/> 

以下とともに:

<security:form-login login-page="/view/page/login"
        default-target-url="/view/page/display"
        authentication-failure-handler-ref="CustomAuthenticationFailureHandler"
        authentication-success-handler-ref="CustomAuthenticationSuccessHandler"/>

以下は、extraFieldAuthenticationProvider クラスです。

public class ExtraFieldAuthenticationFilter
        extends UsernamePasswordAuthenticationFilter {
    private final static Logger LOG =
            Logger.getLogger(ExtraFieldAuthenticationFilter.class.getName());

    @Override
    protected String obtainUsername(HttpServletRequest request) {
        String userName = super.obtainUsername(request);
        String type = request.getParameter(WebConstants.PARAM_J__TYPE);
        return StringUtils.join(new String[]{type, userName});
    }
}

問題は、ログインに失敗すると、Tomcat 401 エラーが発生することです。に制御が渡されていませんCustomAuthenticationFailureHandler

アイデアはありますか?(Bdw ...私はSpring Securityに比較的慣れていないので、別の人のコードをデバッグしています)

どうもありがとう!

Krt_マルタ

4

1 に答える 1

1

サーバーとして、Tomcat 6.0.29 に基づくカスタム サーバーを使用しています。

まず、Tomcat サーバーの構成に問題があるかどうかを確認する必要があります (たとえば、Tomcat 認証が設定されているか、( clientAuth="true"Tomcat サーバー構成で) クライアント証明書を提示する必要があるかなど)。

コントロールが Spring Security への最初の Tomcat 認証を通過しているかどうかを確認できる場合は、別の解決策がある可能性があります。関連するすべてのコードが提供されたわけではありませんが、コードは、認証要求とともに渡される追加のフォーム パラメータをチェックしているようです。WebConstants.PARAM_J__TYPEこれは、定数で定義されます。

于 2011-03-24T17:04:08.140 に答える