2016-07-22 10 views
3

Es ist eine gängige Praxis im Frühjahr Sicherheit oauth Implementierung OAuth Endpunkte mit der folgenden Zeile zu sichern:Was ist der Grund für die Verwendung von requestMatchers(). AntMatchers() ohne ein Verb im Frühling Sicherheit?

.requestMatchers().antMatchers("/login", "/oauth/authorize", "/oauth/confirm_access")

Der gesamte Aufbau sieht wie folgt aus:

http 
    .formLogin().loginPage("/login").permitAll() 
    .and() 
    .requestMatchers().antMatchers("/login", "/oauth/authorize", "/oauth/confirm_access") 
    .and() 
    .authorizeRequests().anyRequest().authenticated(); 

Kann mir jemand erklären, Warum wird diese bestimmte Zeile benötigt, da die nächste Zeile explizit besagt, dass alle Anfragen authentifiziert werden müssen?

Antwort

0

Spring Security verwaltet mehrere Servlet-Filterketten.

In modernen Spring Security (V3.2.x und höher) jede Kette konfiguriert durch WebSecurityConfigurerAdapter und angewandte basierend auf @Order(...) Klasse Anmerkungen bis zum ersten berichteten, dass es HttpServletRequest unterstützt, die über .requestMatchers konfiguriert ist() `DSL:

Ab Version 3.1, {@code FilterChainProxy} wird mit einer Liste von konfiguriert {@link SecurityFilterChain} Instanzen, von denen jede enthält eine {@link RequestMatcher }, und eine Liste von Filtern, die zum passenden angewendet werden soll Anfragen. Die meisten Anwendungen werden nur eine einzige Filterkette enthalten, und wenn Sie den Namespace verwenden, müssen Sie die Ketten nicht explizit setzen. Wenn Sie eine feinere Steuerung benötigen, können Sie die Verwendung des Namensraumelements {@code} vornehmen. Dies definiert ein URI-Muster und die Liste der Filter (als komma-getrennte Bean-Namen), die auf Anfragen angewendet werden sollen, die dem Muster entsprechen. Eine Beispielkonfiguration könnte wie folgt aussehen:

public class FilterChainProxy extends GenericFilterBean { 
... 
/** 
* Returns the first filter chain matching the supplied URL. 
* 
* @param request the request to match 
* @return an ordered array of Filters defining the filter chain 
*/ 
private List<Filter> getFilters(HttpServletRequest request) { 
    for (SecurityFilterChain chain : filterChains) { 
     if (chain.matches(request)) { 
      return chain.getFilters(); 
     } 
    } 

    return null; 
} 

Dann ausgewählte Kette angelegt Anfrage zu sichern.

Ihre Einstellung gilt nur für 3 URLs, alle anderen URLs bleiben ungesichert, wenn nicht anders konfiguriert.

Verwandte Themen