Ich habe Spring Security-Konfiguration mit SPNEGO, die "mit einem Hack" arbeitet. Es sieht aus wie folgt:WebSecurityConfiguratorAdapter mit benutzerdefinierten Authentifizierungsfilter - Abhängigkeitsproblem
@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;
}
...
}
Was geschieht:
- I spnegoAuthenticationProcessingFilter (1)
- Dieser Filter hat die Abhängigkeit von AuthenticationManager (2)
- Ich brauche Authentifizierung hinzufügen hinzufügen müssen providers (3)
Punkt in dieser Klasse zu sein, die WebSecurityConfigurerAdapter
ist Ich bin Ove rriding 2 Methoden:
configure(HttpSecurity http)
- diese Abhängigkeit von der bereitsAuthenticationManager
durch benutzerdefinierte Filter eingebaut hatconfigure(AuthenticationManagerBuilder auth)
- dies bezieht sich eindeutig aufAuthenticationManager
noch gebaut keine ist - wir Gebäude sind
Wenn Ich habe nicht die @Autowired
auf Methode (3) die ist zu früh gebaut und meine Zugabe von AuthenticationProvider
s hat keine Wirkung. Die Authentifizierung schlägt fehl, mit Ausnahme gibt es keine geeigneten AuthenticationProvider
.
Mit der @Autowired
an Ort und Stelle funktioniert es aber wenn es sich falsch anfühlt. Ich bin mir nicht einmal sicher, warum es dann funktioniert.
Bitte beachten Sie die richtige Vorgehensweise.
Edit: Es funktioniert tatsächlich ohne die @ Autowired. Aber der Punkt ist in der akzeptierten Antwort. Wenn Sie jemals auf in @Configuration
angewiesen sind, stellen Sie sicher, dass es entweder ausgesetzt oder über die authenticationManagerBean()
-Methode verwiesen wird.