Um die Spring-Abhängigkeitsinjektion zu nutzen, ist es üblich, Filter in Spring Boot normalerweise als Beans zu registrieren mit @Autowire. Dies kann jedoch dazu führen, dass der Filter zweimal aufgerufen wird.
Wie Sie bemerkt haben, registriert Spring Boot automatisch als Beans markierte Filter im Servlet-Container. Das bedeutet, dass Ihr über @Bean registrierter Filter sowohl von Spring Security als auch vom Container aufgerufen wird.
Es gibt zwei Hauptansätze, um dieses Problem zu lösen:
1. Automatische Registrierung verhindern:
Wenn Sie Abhängigkeiten nicht automatisch in Ihren Filter einbinden müssen, vermeiden Sie es einfach, ihn als Bean verfügbar zu machen. Definieren Sie es stattdessen als reguläre Java-Klasse und registrieren Sie es manuell nur bei Spring Security:
http.addFilterBefore(new YourFilter(), BasicAuthenticationFilter.class);
2. Deaktivieren Sie die Spring Boot-Registrierung:
Um Ihren Filter manuell zu registrieren und trotzdem die Abhängigkeitsinjektion zu verwenden, können Sie FilterRegistrationBean nutzen:
@Bean public FilterRegistrationBean registration(YourFilter filter) { FilterRegistrationBean<YourFilter> registration = new FilterRegistrationBean<>(filter); registration.setEnabled(false); // Disable Spring Boot registration return registration; }
Diese Konfiguration verhindert, dass Spring Boot Ihren Filter registriert, erlaubt es aber Sie können die Filter-Bean für die Spring-Abhängigkeitsinjektion angeben.
Das obige ist der detaillierte Inhalt vonWarum wird mein Spring-Filter zweimal aufgerufen, wenn er als Bean definiert ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!