我有弹簧安全配置与SPNEGO正在“与黑客”工作。它看起来如下:WebSecurityConfigurerAdapter与自定义身份验证过滤器 - 依赖性问题
@Configuration
@EnableWebSecurity
public class SpnegoConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
...
.addFilterBefore(
spnegoAuthenticationProcessingFilter(authenticationManagerBean()),
BasicAuthenticationFilter.class); // 1
}
@Override
@Autowired // 3
protected void configure(AuthenticationManagerBuilder auth)
throws Exception {
auth
.authenticationProvider(kerberosAuthenticationProvider())
.authenticationProvider(kerberosServiceAuthenticationProvider());
}
@Bean
public SpnegoAuthenticationProcessingFilter spnegoAuthenticationProcessingFilter(
AuthenticationManager authenticationManager) { // 2
SpnegoAuthenticationProcessingFilter filter =
new SpnegoAuthenticationProcessingFilter();
filter.setAuthenticationManager(authenticationManager);
return filter;
}
...
}
正在发生的事情:
- 我需要添加spnegoAuthenticationProcessingFilter(1)
- 这个过滤器对的AuthenticationManager的依赖(2)
- 我需要添加认证提供者(3)
点在这个类是WebSecurityConfigurerAdapter
我ove rriding 2种方法:
configure(HttpSecurity http)
- 这对通过自定义过滤器已经内置AuthenticationManager
依赖configure(AuthenticationManagerBuilder auth)
- 这显然涉及对AuthenticationManager
没有正在修建,但 - 我们正在建设它
如果在方法(3)上我没有@Autowired
,AuthenticationManager
内置得太早,我添加的AuthenticationProvider
s不起作用。身份验证失败,但没有合适的AuthenticationProvider
。
随着@Autowired
到位,它的工作原理,但如果感觉不对。我甚至不知道为什么它开始工作。
请教正确的方法。
编辑:它实际上没有@Autowired工作。但重点在于接受的答案。如果您依赖@Configuration
中的AuthenticationManager
,请确保它是通过authenticationManagerBean()
方法暴露或引用的。