2015-01-21 1 views
7

Ho seguente configurazione Primavera di sicurezza:Primavera Boot: accessDeniedHandler non funziona

@Configuration 
@EnableWebSecurity 
public class WebSecurityConfig extends WebSecurityConfigurerAdapter { 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http.authorizeRequests().antMatchers("/api/private/**", "/app/**").authenticated(); 
     http.csrf().disable(); 
     http.logout().logoutSuccessUrl("/"); 
     http.exceptionHandling().accessDeniedPage("/403"); //.accessDeniedHandler(accessDeniedHandler); 
    } 
} 

mi aspetto seguente logica: non utenti authenitcated saranno reindirizzati a /403. Invece di quella primavera visualizza la pagina predefinita di Tomcat 403. Ho anche provato la personalizzazione accessDeniedHandler senza alcun successo.

Come posso implementare la logica personalizzata in caso di errore di accesso?

risposta

15

AccessDeniedHandler si applica solo agli utenti autenticati. Il comportamento predefinito per gli utenti non autenticati è il reindirizzamento alla pagina di accesso (o qualsiasi altra cosa sia appropriata per il meccanismo di autenticazione in uso).

Se si desidera modificare è necessario configurare uno AuthenticationEntryPoint, che viene richiamato quando un utente non autenticato tenta di accedere a una risorsa protetta. Dovreste essere in grado di utilizzare

http.exceptionHandling().authenticationEntryPoint(...) 

invece di quello che hai. Per maggiori dettagli, controllare lo API docs.

1

Il normale comportamento di Spring Security consiste nel reindirizzare gli utenti non autenticati alla pagina di accesso come configurato di seguito. Autentica gli utenti che non sono autorizzati (non hanno il ruolo di amministratore) sarà diretto alla pagina di accesso negato:

http.authorizeRequests().antMatchers("/admin/**") 
    .access("hasRole('ADMIN')") 
    .and().formLogin().loginPage("/login") 
    .and().exceptionHandling().accessDeniedPage("/403"); 

Se è stato implementato il proprio meccanismo di autenticazione e non si contano dalla configurazione Primavera di sicurezza per fornire non autenticato gli utenti alla tua pagina di login, è possibile gioco la configurazione di sicurezza della molla come segue - per servire la vostra pagina personalizzata 403 invece di una vera e propria pagina di login:

http.authorizeRequests().antMatchers("/admin/**") 
    .access("hasRole('ADMIN')") 
    .and().formLogin().loginPage("/403") 
    .and().exceptionHandling().accessDeniedPage("/403");