2014-08-29 27 views
11

Ho un filtro di autenticazione personalizzato che crea PreAuthenticatedAuthenticationToken e lo memorizza nel contesto di sicurezza. Tutto funziona bene. Qui è il config:Sicurezza di primavera e autenticazione personalizzata Filtro con avvio a molla

@Configuration 
@EnableWebMvcSecurity 
public class WebSecurityConfig extends WebSecurityConfigurerAdapter { 

    @Autowired 
    private SsoAuthenticationProvider authenticationProvider; 

    @Autowired 
    private SsoAuthenticationFilter ssoAuthenticationFilter; 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http.addFilterAfter(ssoAuthenticationFilter, SecurityContextPersistenceFilter.class); 
    } 
} 

Ora il mio ssoAuthenticationFilter fa parte della FilterChainProxy, nella giusta posizione. Liscio.

Ma come lo ssoAuthenticationFilter è Filter viene prelevato da Avvio e incluso come filtro. Così la mia catena di filtri Sembra veramente:

  • ssoAuthenticationFilter (inclusi perché essendo Filter)
  • filterChainProxy (primavera configurazione automatica)
    • ...
    • SecurityContextPersistenceFilter
    • ssoAuthenticationFilter (incluso da http.addFilterAfter(...))
    • ...
  • alcuni altri filtri

Ovviamente vorrei sbarazzarsi della autoregistrazione del ssoAuthenticationFilter qui (la prima elencati).

Qualsiasi consiglio molto apprezzato.

risposta

11

2 scelte:

  1. Aggiungi un FilterRegistrationBean@Bean con il chicco di filtro come il suo filtro bersaglio e segnare come enabled = false

  2. Non creare una definizione @Bean per il filtro (normalmente questo è quello che faccio, ma YMMV dal momento che si potrebbe dipendere da autowiring o qualcosa per farlo funzionare)

+0

Sei l'uomo - come allways con S avvio pring. –

+0

Ci sono piani per convergere la configurazione del filtro Spring Security con il modo Spring Boot di farlo? Mi piacerebbe essere in grado di impostare l'ordine dei miei filtri servlet, inclusa la possibilità di inserirne uno prima dei filtri di sicurezza, senza dover pasticciare con 'HttpSecurity' – Adam

+0

Non penso di averlo capito (e non sembra aggiungere qualcosa alla risposta). Ad ogni modo, non puoi fare filtri di sicurezza come bean ordinati perché possono esserci più catene di filtri in un contesto. –

Problemi correlati