在AuthenticationSevider成功完成SpringSecurity

时间:2016-04-27 04:11:03

标签: java spring-security

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

如果我使用AuthenticationSuccessHandler,它将在提供者取得任何成功后运行。如果我在CustomUserDetailsS​​ervice中编写代码,我就无法在其中获取密码信息。

1 个答案:

答案 0 :(得分:1)

您可以为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