Heim >Java >javaLernprogramm >Warum wird mein Spring-Filter zweimal aufgerufen und wie kann ich das beheben?
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
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(); }
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; }
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!