2016-04-22 22 views
10

Ho la seguente configurazione Primavera di sicurezza:Come applicare il filtro di sicurezza molla solo sugli endpoint protetti?

httpSecurity 
      .csrf() 
      .disable() 
      .exceptionHandling() 
      .authenticationEntryPoint(unauthorizedHandler) 
      .and() 
      .sessionManagement() 
      .sessionCreationPolicy(SessionCreationPolicy.STATELESS) 
      .and() 
      .authorizeRequests() 
      .antMatchers("/api/**").fullyAuthenticated() 
      .and() 
      .addFilterBefore(authenticationTokenFilterBean(), UsernamePasswordAuthenticationFilter.class); 

Il authenticationTokenFilterBean() viene applicata anche sugli endpoint che non corrispondono /api/** espressione. Ho anche provato ad aggiungere il seguente codice di configurazione

@Override 
public void configure(WebSecurity webSecurity) { 
    webSecurity.ignoring().antMatchers("/some_endpoint"); 
} 

ma questo ancora non ha risolto il mio problema. Come posso dire a primavera sicurezza di applicare i filtri solo sugli endpoint che corrispondono all'espressione URI protetta? Grazie

risposta

9

Ho un'applicazione con la stessa esigenza e per risolverlo ho limita principalmente Primavera di sicurezza ad un determinato incontro picchiettio formica (usando antMatcher) come segue:

http.antMatcher("/api/**").authorizeRequests() // 
     .anyRequest().authenticated() // 
     .and() 
     .addFilterBefore(authenticationTokenFilterBean(), UsernamePasswordAuthenticationFilter.class); 

si può leggere come segue: per http invocare solo queste configurazioni sulle richieste che corrispondono al modello formica /api/** autorizza any request a authenticated utenti andadd filterauthenticationTokenFilterBean()beforeUsernamePasswordAuthenticationFilter. Per tutte le altre richieste questa configurazione non ha alcun effetto.

+1

Cosa succede se volevo consentire/api/login cioè bypass/api/login completamente. Anche io faccio un permesso All(), il filtro viene ancora chiamato. Si prega di suggerire. – rohitpal

+0

Ciao @rohitpal, hai risolto il tuo problema? Perché ho incontrato questo ora. – bejond

2

di bypassare la sicurezza a molla per alcuni endpoint specifici effettuare le seguenti operazioni:

httpSecurity 
    .authorizeRequests() 
    .antMatchers("/some_endpoints").permitAll() 
    .anyRequest().authenticated() 
    .and() 
    ... 
+0

C'è un modo per specificare i percorsi che si applicano a filtri specifici anziché endpoint? – Edd

+0

intendete qualcosa come/some_endpoint/** che includa/some_endpoint/path1 etc? ... Allora sì ... rendere antMatcher accetta '/ api/**' – phoenix

+0

Grazie alla risposta, @phoenix. Sfortunatamente, questo non risolve il mio problema. Il filtro si applica ancora per l'URL "/ some_endpoints" – Bravo