2016-09-04 5 views
4

Ich möchte @Autowire mit einem Filter verwenden. So definiere ich meine Filter im SecurityConfig wie folgt:Filter zweimal aufrufen, wenn als Spring-Bean registrieren

@Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS); 
     http.addFilterBefore(getA(), BasicAuthenticationFilter.class); 
     http.csrf().disable(); 
    } 

    @Bean 
    public A getA(){ 
     return new A(); 
    } 

Dieser Filter A Spring erstreckt GenericFilterBean.

Ich bekomme unter Ausgang, wenn ich den Controller aufrufen, der zeigt, dass der Filter zweimal trifft.

filter A before 
filter A before 
mycontroller invoke 
filter A after 
filter A after 

Meine Beobachtung ist, diese zusätzliche Aufruf mit Federbehälter aufrufen, weil, wenn Filter nicht als bean registrieren, es nur einmal Treffer erhalten. Was ist der Grund und wie kann ich es beheben?

Antwort

11

Wie Sie festgestellt haben, registriert Spring Boot automatisch jede Bean, die eine Filter mit dem Servlet-Container ist. Eine Option besteht darin, Ihren Filter nicht als Bean auszusetzen und ihn nur mit Spring Security zu registrieren.

Wenn Sie in der Lage sein möchten Abhängigkeiten in Ihren Filter zu übertragen, dann muss es eine Bean sein. Das bedeutet, dass Sie Spring Boot mitteilen müssen, dass es nicht als Filter registriert werden soll. Wie described in the documentation, tun Sie, dass eine FilterRegistrationBean mit:

@Bean 
public FilterRegistrationBean registration(MyFilter filter) { 
    FilterRegistrationBean registration = new FilterRegistrationBean(filter); 
    registration.setEnabled(false); 
    return registration; 
} 
+2

Ein Aufruf durch den Servlet-Container ist und das andere ist von Spring Security –

+0

Es für Spring Security keine separaten Behälter, aber es hat seine eigene Kette von Filtern, die verwendet werden, zu entscheiden, ob eine Anfrage erlaubt sein soll oder nicht. –

+0

Code funktioniert für mich. Was ist der Grund für die doppelte Registrierung? –

Verwandte Themen