我有SPNEGO的弹簧安全配置,它正在“与黑客”一起工作。它看起来如下:
@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;
}
...
}
发生了什么:
点在这个类中WebSecurityConfigurerAdapter
我正在覆盖2个方法:
configure(HttpSecurity http)
- 这依赖于已经构建的AuthenticationManager
到自定义过滤器configure(AuthenticationManagerBuilder auth)
- 这显然与AuthenticationManager
尚未建成有关 - 我们正在建设如果方法(3)上没有@Autowired
AuthenticationManager
,则AuthenticationProvider
过早构建,添加AuthenticationProvider
s无效。身份验证失败,但没有合适的@Autowired
。
如果AuthenticationManager
到位,它会起作用,但如果感觉不对。我甚至不确定它为什么会开始工作。
请就正确的方法提出建议。
编辑:实际上没有@Autowired。但重点是接受的答案。如果您依赖于@Configuration
authenticationManagerBean()
,请确保通过Mode Time
Air 2
Sea 4
Air 5
Sea 6
方法公开或引用它。
答案 0 :(得分:2)
您使用了错误的AuthenticationManager
。
如果您想使用AuthenticationManager
SpnegoConfig
进行依赖注入,则必须公开它,请参阅JavaDoc:
重写此方法以使Authentication(AuthenticationManagerBuilder)中的AuthenticationManager公开为Bean。例如:
@Bean(name name="myAuthenticationManager") @Override public AuthenticationManager authenticationManagerBean() throws Exception { return super.authenticationManagerBean(); }
如果您要配置全局AuthenticationManager
,则必须自动装配AuthenticationMangerBuilder
,请参阅Spring Security 3.2.0.RC2 Released
例如,如果要配置全局身份验证(即只有一个AuthenticationManager),则应自动连接AuthenticationMangerBuilder:
@Autowired public void configureGlobal(AuthenticationManagerBuilder auth) { // ... configure it ... }