所以我正在研究Spring Security的实现。我遇到了一段代码,无法理解。因此,根据文档,当我们要自定义Spring使用的AuthenticationManager时,必须重写以下方法。
protected void configure(AuthenticationManagerBuilder auth) throws java.lang.Exception
我的问题是谁正在调用此方法并在此处传递 AuthenticationManagerBuilder 实例。 我看到的工作示例不会创建/公开任何 AuthenticationManagerBuilder bean。
此外,我在文档中看到以下内容,
受保护的AuthenticationManager authenticationManager() 引发java.lang.Exception获取要使用的AuthenticationManager。
默认 策略是如果configure(AuthenticationManagerBuilder)方法是 重写以使用传入的AuthenticationManagerBuilder。 否则,请按类型自动连接AuthenticationManager。
被覆盖的方法是一个空方法,这也许就是为什么我对正在做的事情/应该做的事情感到更加困惑的原因。
任何帮助/指针都将受到高度赞赏。我知道它有效,但似乎无法弄清楚。 非常感谢。
答案 0 :(得分:1)
假设以下是您遇到的代码
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(MyAuthenticationProvider);
}
}
请注意
这里
@EnableWebSecurity使用@EnableGlobalAuthentication进行元注释
@Retention(value=RUNTIME)
@Target(value=TYPE)
@Documented
@Import(value={WebSecurityConfiguration.class,org.springframework.security.config.annotation.web.configuration.SpringWebMvcImportSelector.class,org.springframework.security.config.annotation.web.configuration.OAuth2ImportSelector.class})
@EnableGlobalAuthentication
@Configuration
public @interface EnableWebSecurity
和@EnableGlobalAuthentication导入AuthenticationConfiguration
@Retention(value=RUNTIME)
@Target(value=TYPE)
@Documented
@Import(value=AuthenticationConfiguration.class)
@Configuration
public @interface EnableGlobalAuthentication
AuthenticationConfiguration包含以下代码,用于将AuthenticationManagerBuilder注册为Bean
@Bean
public AuthenticationManagerBuilder authenticationManagerBuilder(
ObjectPostProcessor<Object> objectPostProcessor, ApplicationContext context) {
...
}