2015-06-13 11 views
20

cui lavoro sul sistema di gestione dei contenuti, che ha cinque antMatchers come la seguente:multipli antMatchers in sicurezza primavera

http.authorizeRequests() 
     .antMatchers("/", "/*.html").permitAll() 
     .antMatchers("/user/**").hasRole("USER") 
     .antMatchers("/admin/**").hasRole("ADMIN") 
     .antMatchers("/admin/login").permitAll() 
     .antMatchers("/user/login").permitAll() 
     .anyRequest().authenticated() 
     .and() 
     .csrf().disable(); 

che supponiamo di dire che i visitatori possono vedere tutti i siti nel percorso root (/ *) e gli utenti possono vedere solo (/ utente), l'amministratore può vedere solo (/ admin) e ci sono due pagine di accesso una per gli utenti e un'altra per l'amministratore.

Il codice sembra funzionare correttamente, tranne la sezione di amministrazione - non funziona ma restituisce l'eccezione di accesso negata.

risposta

39

Credo che il problema è nell'ordine delle regole:

.antMatchers("/admin/**").hasRole("ADMIN") 
.antMatchers("/admin/login").permitAll() 

L'ordine delle regole questioni e le regole più specifiche dovrebbe andare per primo. Ora tutto ciò che inizia con /admin richiede l'utente autenticato con ruolo ADMIN, anche il percorso /admin/login (perchécorrisponde già alla regola /admin/** e quindi la seconda regola viene ignorata).

La regola per la pagina di accesso deve quindi passare prima della regola /admin/**. PER ESEMPIO.

.antMatchers("/admin/login").permitAll() 
.antMatchers("/admin/**").hasRole("ADMIN") 
Problemi correlati