AuthenticationProvider

AuthenticationProvider

我有多个AuthenticationProviders(MyOwn,Kerberos,Local)。身份验证成功后,我想用密码保存一些信息。但是每个提供程序之后的代码都不同。因此,我想在authenticationProvider成功之后立即运行此代码。我怎样才能做到这一点?

如果我使用AuthenticationSuccessHandler,它将在提供程序成功运行后运行。如果我在CustomUserDetailsS​​ervice中编写代码,则无法访问其中的密码信息。

最佳答案

您可以为AuthenticationSuccessEvent注册一个侦听器。

ProviderManager将身份验证委派给每个已注册的AuthenticationProvider。在通过AuthenticationProvider之一成功进行身份验证之后,ProviderManager将通过其AuthenticationSuccessEvent发布AuthenticationEventPublisher

如果要接收此事件并获得对Authentication的访问权,以下Java配置将在此事件的上下文中注册ApplicationListener bean:

@Bean
public ApplicationListener<AuthenticationSuccessEvent> authenticationSuccessEventListener() {
    return new ApplicationListener<AuthenticationSuccessEvent>() {

        @Override
        void onApplicationEvent(AuthenticationSuccessEvent event) {
                Authentication authentication = event.getAuthentication();
                // TODO
        }
    };
}


ApplicationListener的更多文档可在here中找到:

关于java - 在Spring Security中AuthenticationProvider成功之后做些什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36880156/

10-08 22:52