Heim > Java > javaLernprogramm > Warum wird mein Spring-Filter zweimal aufgerufen, wenn er als Bean definiert ist?

Warum wird mein Spring-Filter zweimal aufgerufen, wenn er als Bean definiert ist?

DDD
Freigeben: 2024-12-05 17:45:13
Original
722 Leute haben es durchsucht

Why is My Spring Filter Invoked Twice When Defined as a Bean?

Warum wird ein Filter zweimal aufgerufen, wenn er als Spring Bean registriert wird?

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.

Ursache

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.

Lösung

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);
Nach dem Login kopieren

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;
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage