2016-04-22 13 views
10

Ich habe folgende Spring Security-Konfiguration:Wie wird der Sicherheitsfilter nur auf gesicherten Endpunkten angewendet?

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

Die authenticationTokenFilterBean() angewendet wird, auch auf Endpunkte, die nicht /api/** Ausdruck passen. Ich habe auch versucht, folgenden Konfigurationscode

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

hinzuzufügen, aber das hat immer noch nicht mein Problem gelöst. Wie kann ich der Spring-Sicherheit mitteilen, Filter nur auf Endpunkten anzuwenden, die dem gesicherten URI-Ausdruck entsprechen? Danke

Antwort

9

Ich habe eine Anwendung mit der gleichen Forderung und es zu lösen ich im Grunde beschränkt Spring Security zu einem bestimmten Ameise Spiel Rüttler (mit antMatcher) wie folgt:

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

Sie es lesen kann wie folgt: für http nur diese Konfigurationen auf Anfragen rufen Sie die Ameise pattern-Matching /api/**Ermächtigungbis authenticated Benutzer andadd filterauthenticationTokenFilterBean()beforeUsernamePasswordAuthenticationFilter. Für alle anderen Anfragen hat diese Konfiguration keine Auswirkung.

+1

Was, wenn ich/api/login dh umgehen/api/login vollständig erlauben wollte. Auch ich mache eine allowAll(), Filter wird immer noch aufgerufen. Bitte vorschlagen. – rohitpal

+0

Hallo @rohitpal, hast du dein Problem gelöst? Weil ich das jetzt getroffen habe. – bejond

2

Feder Sicherheit für einige spezifischen Endpunkte zu umgehen wie folgt vor:

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

Gibt es eine Möglichkeit, Pfade anzugeben, die für bestimmte Filter anstelle von Endpunkten gelten? – Edd

+0

meinst du sowas wie/some_endpoint/** das würde/some_endpoint/path1 etc beinhalten? ... Dann ja ... lass den antMatcher akzeptieren '/ api/**' – phoenix

+0

Danke deine Antwort, @phoenix. Leider löst das mein Problem nicht. Der Filter gilt weiterhin für die URL "/ some_endpoints" – Bravo

Verwandte Themen