私は "ハックで"動作している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
です。 2つのメソッドrriding:
configure(HttpSecurity http)
を - 私たちはそれを
を構築している場合 - これは明らかに何もまだ建設されてAuthenticationManager
に関連していない - これは、すでにカスタムフィルタ
configure(AuthenticationManagerBuilder auth)
を通じてAuthenticationManager
を建てに依存しています私は方法(3)に@Autowired
を持っていませんAuthenticationManager
はあまりにも早く構築されており、AuthenticationProvider
の私の追加は効果がありません。例外はありませんが、適切なAuthenticationProvider
が存在しません。 @Autowired
が正しく動作していますが、間違っていると思われます。それがなぜ始まったのかは分かりません。
正しいアプローチについてアドバイスをお願いします。
編集:実際に@Autowiredなしで動作します。しかし、その要点は受け入れられた答えにある。 AuthenticationManager
を@Configuration
に設定している場合は、authenticationManagerBean()
メソッドで公開または参照されていることを確認してください。