使用AuthenticationManagerBuilder添加自定义提供程序时如何获取AuthenticationManager?

时间:2018-03-21 15:54:07

标签: spring spring-security

我正在使用Spring Boot 2.0(利用Spring Security 5.0)。我正在尝试将自定义AuthenticationProvider添加到我的WebSecurityConfigurerAdapter子类中的AuthenticationManager。如果我覆盖configure(AuthenticationManagerBuilder)方法来提供我的新提供程序,那么我不知道如何将AuthenticationManager作为bean检索。

例如:

public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception 
    {
        auth.authenticationProvider(customAuthenticationProvider);
    }
}

其中customAuthenticationProvider实现AuthenticationProvider

Spring docs中,似乎指出两者不兼容:

  

5.8.4 AuthenticationProvider您可以通过将自定义AuthenticationProvider公开为bean来定义自定义身份验证。例如,   以下将自定义身份验证假设   SpringAuthenticationProvider实现AuthenticationProvider:

     

[注意]仅在AuthenticationManagerBuilder没有时使用   已填充

实际上,如果我尝试使用:

检索AuthenticationManager bean
@Bean
public AuthenticationManager authenticationManager() throws Exception {
    return super.authenticationManagerBean();
}

然后永远不会调用configure()方法。

那么如何将我自己的自定义提供程序添加到默认的提供程序列表中,并且仍然能够检索AuthenticationManager?

1 个答案:

答案 0 :(得分:2)

您可以覆盖WebSecurityConfigurerAdapter.authenticationManagerBean()方法并使用@Bean注释对其进行注释

 @Bean
 @Override
 public AuthenticationManager authenticationManagerBean() throws Exception {
     return super.authenticationManagerBean();
 }

没有Spring Boot 5.0,最新版本是Spring Boot 2.0。我相信你在谈论Spring Security 5.0。