在Spring Security中向HttpSecurity和AuthenticationManagerBuilder注册身份验证提供程序有什么区别?

时间:2018-11-21 02:03:03

标签: spring-boot spring-security

WebSecurityConfigurerAdapter提供两个替代,如下所示:

protected void configure(AuthenticationManagerBuilder auth)

protected void configure(HttpSecurity http)

HttpSecurityAuthenticationManagerBuilder都为authenticationProviders提供注册。在我的提供者与另一者之间注册我的提供者之间有什么区别?

我还使用带有@SpringBootApplication(exclude = SecurityAutoConfiguration.class)的Spring boot 2.1来完全关闭其自动配置。

1 个答案:

答案 0 :(得分:1)

来自Spring Security Architecture

  

用于身份验证的主要策略界面是   AuthenticationManager [...]

     

AuthenticationManager最常用的实现是   ProviderManager,代表一系列   AuthenticationProvider个实例。 AuthenticationProvider是   有点像AuthenticationManager [...]

     

ProviderManager可以支持多种不同的身份验证   在同一应用程序中的机制通过委派给   AuthenticationProviders。如果ProviderManager无法识别   特定的Authentication实例类型将被跳过。

     

一个ProviderManager有一个可选的父对象,它可以查询   所有提供程序都返回null。如果父级不可用,则为null   Authentication产生AuthenticationException

enter image description here

一般而言,WebSecurityConfigurerAdapter提供HttpSecurity的配置,除了Filter的配置(例如UsernamePasswordAuthenticationFilterLogoutFilter等)之外,它还会创建和配置(使用AuthenticationProviderAuthenticationManager中添加AuthenticationManager和父HttpSecurityAuthenticationManagerBuilder个。

WebSecurityConfigurerAdapter将仅为AuthenticationManager创建一个HttpSecurity。但是AuthenticationManager有自己的AuthenticationProviders和自己的可选父项AuthenticationProvider。在执行http.authenticationProvider(...)时,您要向AuthenticationProvider所属的AuthenticationManager添加新的http。通过使用configure(AuthenticationManagerBuilder auth),您可以配置AuthenticationManager,它是属于特定AuthenticationManager的{​​{1}}的父级。

Spring正在为该特定HttpSecurity的父级提供默认配置,但是通过使用AuthenticationManager,您将拒绝spring的配置,而希望使用(auth)。