2016-04-22 17 views
10

mam następującą konfigurację Wiosna zabezpieczeń:Jak zastosować filtr bezpieczeństwa sprężyn tylko w zabezpieczonych punktach końcowych?

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

The authenticationTokenFilterBean() jest stosowana nawet na punkty końcowe, które nie pasują /api/** wyraz. Próbowałem również dodać następujący kod konfiguracyjny:

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

ale to nadal nie rozwiązało mojego problemu. Jak mogę powiedzieć, że bezpieczeństwo wiosenne stosuje filtry tylko w punktach końcowych pasujących do bezpiecznego wyrażenia URI? Dziękuję

Odpowiedz

9

Mam aplikacji z tym samym wymogiem i rozwiązywać je ja w zasadzie ograniczone Wiosna Security do danego mrówek meczu tupot (przy użyciu antMatcher) w następujący sposób:

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

można go odczytać w następujący sposób: dla http powołać się tylko na te konfiguracje pasujących do żądania ant wzór /api/** upoważniającą any request do authenticated użytkowników andadd filterauthenticationTokenFilterBean()beforeUsernamePasswordAuthenticationFilter. Dla wszystkich pozostałych wniosków ta konfiguracja nie ma wpływu.

+1

Co, jeśli chcę zezwolić/api/login, np. Obejść/api/login całkowicie. Nawet ja robię allowAll(), filtr wciąż jest wywoływany. Proszę zasugeruj. – rohitpal

+0

Witam @rohitpal, czy rozwiązałeś swój problem? Ponieważ spotkałem to teraz. – bejond

2

Aby ominąć zabezpieczenia sprężynowe dla niektórych szczególnych rodzajów działania należy wykonać następujące czynności:

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

Czy istnieje sposób określania ścieżek, które mają zastosowanie do określonych filtrów zamiast punktów końcowych? – Edd

+0

masz na myśli coś takiego jak/some_endpoint/**, który zawiera/some_endpoint/path1 etc? ... Następnie tak ... spraw, aby antMatcher akceptował '/ api/**' – phoenix

+0

Dziękuję za odpowiedź, @phoenix. Niestety to nie rozwiązuje mojego problemu. Filtr nadal stosuje się do "/ some_endpoints" URL – Bravo

Powiązane problemy