我有彈簧安全配置與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()
方法暴露或引用的。