Heim > Java > javaLernprogramm > Warum wird mein Spring-Filter zweimal aufgerufen und wie kann ich das beheben?

Warum wird mein Spring-Filter zweimal aufgerufen und wie kann ich das beheben?

Mary-Kate Olsen
Freigeben: 2024-12-09 03:00:15
Original
975 Leute haben es durchsucht

Why is My Spring Filter Being Invoked Twice, and How Can I Fix It?

Filter zweimal mit Spring Bean Annotation registriert

Bei der Registrierung eines Filters als Spring Bean ist es wichtig, die Möglichkeit mehrerer Aufrufe zu berücksichtigen . In bestimmten Szenarien kann der Filter zweimal ausgelöst werden, wie im folgenden Problem beobachtet:

Problem:

Ein Benutzer definiert einen Filter, A, der Springs GenericFilterBean erweitert . Wenn dieser Filter als Bean in der Spring Security-Konfiguration registriert wird, wird ein zusätzlicher Aufruf beobachtet, der zu der folgenden Ausgabe führt:

filter A before
filter A before
mycontroller invoke
filter A after
filter A after
Nach dem Login kopieren

Abfrage:

Warum Wird der Filter zweimal aufgerufen und wie kann dieses Problem sein? gelöst?

Antwort:

Der zusätzliche Aufruf erfolgt, weil Spring Boot automatisch jede Bean vom Typ Filter beim Servlet-Container registriert. Um dies zu verhindern, gibt es zwei Möglichkeiten:

Option 1: Filter nur bei Spring Security registrieren

Vermeiden Sie die Offenlegung des Filters als Bean und registrieren Sie ihn ausschließlich bei Spring Security , wie folgt:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
    http.addFilterBefore(new A(), BasicAuthenticationFilter.class);
    http.csrf().disable();
}
Nach dem Login kopieren

Option 2: Verwenden Sie FilterRegistrationBean mit Anmerkung

Wenn eine automatische Verknüpfung von Abhängigkeiten mit dem Filter erforderlich ist, kann man ihn als Bean registrieren, aber seine automatische Registrierung beim Servlet-Container mithilfe einer FilterRegistrationBean deaktivieren:

@Bean
public FilterRegistrationBean registration(MyFilter filter) {
    FilterRegistrationBean<MyFilter> registration = new FilterRegistrationBean<MyFilter>(filter);
    registration.setEnabled(false);
    return registration;
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWarum wird mein Spring-Filter zweimal aufgerufen und wie kann ich das beheben?. 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage