6

こんにちは、Spring セキュリティ ログイン フォームに新しい例外を追加する必要がありました。独自のエラー メッセージを表示する必要があることを除いて、すべてが完全に機能します (今までは「間違ったログイン/パスワード」が表示されていました)。

Username password Authentication Filter からデフォルトの試行認証方法をオーバーライドしました:

@Override
public Authentication attemptAuthentication(final HttpServletRequest request, final HttpServletResponse response)
{
if (!myTest()) {
throw new CustomAuthenticationException("custom message");
}
}

私の例外:

public class CustomAuthenticationException extends AuthenticationException {

    public CustomAuthenticationException(final String message)
    {
        super(message);
    }

    public CustomAuthenticationException(final String message, final Throwable cause)
    {
        super(message, cause);
    }

}

コントローラーの SPRING_SECURITY_LAST_EXCEPTION の下に例外が表示されますが、エラー メッセージは常に不正な資格情報によるものです。どうすれば変更できますか?

ありがとうございました

4

4 に答える 4

19

LOCALIZING SPRING SECURITY MESSAGESを試す必要があります。これらの行をファイル
に追加してみてください。ApplicationContext.xmlSpring セキュリティ Bean の残りの場所。

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basename" value="yourFolder/myMessages"/>
</bean>

<KEY, MESSAGE>保存されている春のデフォルト クラスを見つける必要があります。同じとローカライズされmyMessageた を含むファイルを用意します。 KEYMESSAGE


あなたのコメントに基づいて、messages.propertiesプロジェクトに があります。したがって、必要な作業は、MESSAGEこのプロパティ ファイル内にこれらのキーをそれぞれ用意し、メッセージを完全にローカライズすることだけです。

AbstractAccessDecisionManager.accessDenied= your message in any language
AbstractSecurityInterceptor.authenticationNotFound=
AbstractUserDetailsAuthenticationProvider.badCredentials=
AbstractUserDetailsAuthenticationProvider.credentialsExpired=
AbstractUserDetailsAuthenticationProvider.disabled=
AbstractUserDetailsAuthenticationProvider.expired=
AbstractUserDetailsAuthenticationProvider.locked=
AbstractUserDetailsAuthenticationProvider.onlySupports=
AccountStatusUserDetailsChecker.credentialsExpired=
AccountStatusUserDetailsChecker.disabled=
AccountStatusUserDetailsChecker.expired=
AccountStatusUserDetailsChecker.locked=
AclEntryAfterInvocationProvider.noPermission=
AnonymousAuthenticationProvider.incorrectKey=
BindAuthenticator.badCredentials=
BindAuthenticator.emptyPassword=
CasAuthenticationProvider.incorrectKey=
CasAuthenticationProvider.noServiceTicket=
ConcurrentSessionControlStrategy.exceededAllowed=
DigestAuthenticationFilter.incorrectRealm=
DigestAuthenticationFilter.incorrectResponse=
DigestAuthenticationFilter.missingAuth=
DigestAuthenticationFilter.missingMandatory=
DigestAuthenticationFilter.nonceCompromised=
DigestAuthenticationFilter.nonceEncoding=
DigestAuthenticationFilter.nonceExpired=
DigestAuthenticationFilter.nonceNotNumeric=
DigestAuthenticationFilter.nonceNotTwoTokens=
DigestAuthenticationFilter.usernameNotFound=
JdbcDaoImpl.noAuthority=
JdbcDaoImpl.notFound=
LdapAuthenticationProvider.badCredentials=
LdapAuthenticationProvider.credentialsExpired=
LdapAuthenticationProvider.disabled=
LdapAuthenticationProvider.expired=
LdapAuthenticationProvider.locked=
LdapAuthenticationProvider.emptyUsername=
LdapAuthenticationProvider.onlySupports=
PasswordComparisonAuthenticator.badCredentials=
PersistentTokenBasedRememberMeServices.cookieStolen=
ProviderManager.providerNotFound=
RememberMeAuthenticationProvider.incorrectKey=
RunAsImplAuthenticationProvider.incorrectKey=
SubjectDnX509PrincipalExtractor.noMatching=
SwitchUserFilter.noCurrentUser=
SwitchUserFilter.noOriginalAuthentication=
于 2013-05-26T12:48:18.757 に答える
5

messages.properties (または名前を付けたもの) に、次のような行を追加します。

AbstractUserDetailsAuthenticationProvider.badCredentials=The credentials you supplied are invalid.

CustomAuthenticationException は必要ありません。

于 2013-05-27T07:26:50.693 に答える
1

loginMessage.properties のようなクラス パスにプロパティ ファイルを作成します。

そのプロパティ ファイルで、次のように指定します。

AbstractUserDetailsAuthenticationProvider.badCredentials=入力されたユーザー名/パスワードが正しくありません。

次の Bean を applicationContext.xml に追加します。

<bean id="messageSource"   
    class="org.springframework.context.support.ResourceBundleMessageSource">  
    <property name="basenames">  
        <list>
            <value>loginMessage</value>
        </list>
    </property>
</bean>

その後、入力されたユーザー名/パスワードが正しくないなどのメッセージが表示されます。不正な認証情報の代わりに

于 2014-01-23T12:22:16.250 に答える