WebSecurityConfigurerAdapter提供两个替代,如下所示:
protected void configure(AuthenticationManagerBuilder auth)
和
protected void configure(HttpSecurity http)
HttpSecurity
和AuthenticationManagerBuilder
都为authenticationProviders提供注册。在我的提供者与另一者之间注册我的提供者之间有什么区别?
我还使用带有@SpringBootApplication(exclude = SecurityAutoConfiguration.class)
的Spring boot 2.1来完全关闭其自动配置。
答案 0 :(得分:1)
来自Spring Security Architecture
用于身份验证的主要策略界面是
AuthenticationManager
[...]
AuthenticationManager
最常用的实现是ProviderManager
,代表一系列AuthenticationProvider
个实例。AuthenticationProvider
是 有点像AuthenticationManager
[...]
ProviderManager
可以支持多种不同的身份验证 在同一应用程序中的机制通过委派给AuthenticationProviders
。如果ProviderManager
无法识别 特定的Authentication
实例类型将被跳过。一个
ProviderManager
有一个可选的父对象,它可以查询 所有提供程序都返回null。如果父级不可用,则为nullAuthentication
产生AuthenticationException
。
一般而言,WebSecurityConfigurerAdapter
提供HttpSecurity
的配置,除了Filter
的配置(例如UsernamePasswordAuthenticationFilter
,LogoutFilter
等)之外,它还会创建和配置(使用AuthenticationProvider
在AuthenticationManager
中添加AuthenticationManager
和父HttpSecurity
)AuthenticationManagerBuilder
个。
WebSecurityConfigurerAdapter
将仅为AuthenticationManager
创建一个HttpSecurity
。但是AuthenticationManager
有自己的AuthenticationProviders
和自己的可选父项AuthenticationProvider
。在执行http.authenticationProvider(...)
时,您要向AuthenticationProvider
所属的AuthenticationManager
添加新的http
。通过使用configure(AuthenticationManagerBuilder auth)
,您可以配置AuthenticationManager
,它是属于特定AuthenticationManager
的{{1}}的父级。
Spring正在为该特定HttpSecurity
的父级提供默认配置,但是通过使用AuthenticationManager
,您将拒绝spring的配置,而希望使用(auth)。