2016-08-25 5 views
3

Ich habe einen benutzerdefinierten Authentifizierungsfilter in meinem Spring 4 MVC + Security + Boot-Projekt festgelegt. Der Filter macht seinen Job gut und jetzt möchte ich die Sicherheit für einige URI (wie /api/**) deaktivieren. Hier ist meine KonfigurationSpring webSecurity.ignoring() ignoriert benutzerdefinierten Filter nicht

Leider, wenn ich Ressource unter/api/... aufrufen, ist der Filter immer noch verkettet. Ich habe println in meinem Filter hinzugefügt und es wird bei jedem Anruf in die Konsole geschrieben. Weißt du, was mit meiner Konfiguration nicht stimmt?

UPDATE

Filter Code:

@Component 
public class EAccessAuthenticationFilter extends RequestHeaderAuthenticationFilter { 

    @Override 
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 
     System.out.println("FILTER"); 
     if(SecurityContextHolder.getContext().getAuthentication() == null){ 
      //Do my authentication stuff 
      PreAuthenticatedAuthenticationToken authentication = new PreAuthenticatedAuthenticationToken(user, credential, authorities); 
      SecurityContextHolder.getContext().setAuthentication(authentication); 
     } 
     super.doFilter(request, response, chain); 
    } 

    @Override 
    @Autowired 
    public void setAuthenticationManager(AuthenticationManager authenticationManager) { 
     super.setAuthenticationManager(authenticationManager); 
    } 

} 

Antwort

0

ich der einfachste Weg, immer gefunden, dies zu tun, ist diese Konfiguration in Ihren application.properties zu setzen: Ich

spring.security.ignored=/api/** 
+0

Es security.ignored ist =/api/** (ohne „Frühling ") und diese Lösung funktioniert auch nicht. Aber gut zu bemerken! – rattek

+0

Hmmm, sowohl Ihr Originalcode als auch dieser sollte aus meiner Erfahrung stammen. Können Sie Ihren relevanten Filtercode posten? – Adam

+0

Ich habe gerade den Beitrag mit dem Filter aktualisiert – rattek

0

Nach einigen Tests erkannte, dass meine Konfigurationen in der Tat in Ordnung sind und es nur ein Verständnisproblem ist. Der spring.security.ignored=/api/** umgeht oder schaltet den Filter nicht aus. In Wirklichkeit passiert jede Anfrage immer noch meinen benutzerdefinierten Filter, aber der Unterschied besteht darin, dass Spring Security weder den Authentifizierungsstatus noch die erteilte Berechtigung berücksichtigt, die vom benutzerdefinierten Filter stammt.

Ich frage mich, dass die "ignorierte" Eigenschaft einfach die Feder Sicherheitsfilter umgehen. Es klingt wie ich völlig falsch war ...

5

@Component EAccessAuthenticationFilter auf Klasse entfernen, und wie folgt aus:

@Override 
protected void configure(HttpSecurity http) throws Exception { 
    http.authorizeRequests() 
      .anyRequest().authenticated() 
      .and() 
      .addFilterBefore(new EAccessAuthenticationFilter(), BasicAuthenticationFilter.class); 
} 

https://github.com/spring-projects/spring-security/issues/3958

+0

Du hast meinen Tag gerettet! –

Verwandte Themen