Logout di sicurezza di primavera

1. Panoramica

Questo articolo si basa sul nostro tutorial sull'accesso al modulo e si concentrerà su come configurare il logout con Spring Security .

2. Configurazione di base

La configurazione di base della funzionalità Spring Logout utilizzando il metodo logout () è abbastanza semplice:

@Configuration @EnableWebSecurity public class SecSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(final HttpSecurity http) throws Exception { http //... .logout() //... } //... }

E utilizzando la configurazione XML:

 ...  

L'elemento abilita il meccanismo di logout predefinito, che è configurato per utilizzare il seguente URL di logout : / logout che era / j_spring_security_logout prima di Spring Security 4 .

3. Il JSP e il collegamento di disconnessione

Continuando questo semplice esempio, il modo per fornire un collegamento di logout nell'applicazione Web è:

Logout 

4. Personalizzazioni avanzate

4.1. logoutSuccessUrl ()

Dopo che il processo di disconnessione è stato eseguito correttamente, Spring Security reindirizzerà l'utente a una pagina specificata. Per impostazione predefinita, questa è la pagina principale ( "/" ) ma è configurabile:

//... .logout() .logoutSuccessUrl("/afterlogout.html") //...

Questo può essere fatto anche utilizzando la configurazione XML:

A seconda dell'applicazione, una buona pratica è reindirizzare l'utente alla pagina di accesso:

//... .logout() .logoutSuccessUrl("/login.html") //...

4.2. logoutUrl ()

Analogamente ad altre impostazioni predefinite in Spring Security, anche l'URL che attiva il meccanismo di disconnessione ha un'impostazione predefinita - / logout .

Tuttavia, è una buona idea modificare questo valore predefinito, per assicurarsi che non vengano pubblicate informazioni su quale framework viene utilizzato per proteggere l'applicazione:

.logout() .logoutUrl("/perform_logout")

E tramite XML:

4.3. invalidateHttpSession e deleteCookies

Questi due attributi avanzati controllano l'invalidazione della sessione e un elenco di cookie da eliminare quando l'utente si disconnette. In quanto tale, invalidateHttpSession consente di configurare la sessione in modo che non venga invalidata quando si verifica il logout (è vero per impostazione predefinita).

Anche il metodo deleteCookies è semplice:

.logout() .logoutUrl("/perform_logout") .invalidateHttpSession(true) .deleteCookies("JSESSIONID")

E la versione XML:

4.4. logoutSuccessHandler ()

Per scenari più avanzati, in cui lo spazio dei nomi non è sufficientemente flessibile, il bean LogoutSuccessHandler dal contesto Spring può essere sostituito da un riferimento personalizzato:

@Bean public LogoutSuccessHandler logoutSuccessHandler() { return new CustomLogoutSuccessHandler(); } //... .logout() .logoutSuccessHandler(logoutSuccessHandler()); //...

La configurazione XML equivalente è:

 ... 

Qualsiasi logica di applicazione personalizzata che deve essere eseguita quando l'utente si disconnette correttamente può essere implementata con un gestore di riuscita della disconnessione personalizzata. Ad esempio, un semplice meccanismo di controllo che tiene traccia dell'ultima pagina su cui si trovava l'utente quando ha attivato il logout:

public class CustomLogoutSuccessHandler extends SimpleUrlLogoutSuccessHandler implements LogoutSuccessHandler { @Autowired private AuditService auditService; @Override public void onLogoutSuccess( HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException { String refererUrl = request.getHeader("Referer"); auditService.track("Logout from: " + refererUrl); super.onLogoutSuccess(request, response, authentication); } }

Inoltre, tieni presente che questo bean personalizzato ha la responsabilità di determinare la destinazione a cui è diretto l'utente dopo la disconnessione. Per questo motivo , l'associazione dell'attributo logoutSuccessHandler con logoutSuccessUrl non funzionerà, poiché entrambi coprono funzionalità simili.

5. conclusione

In questo esempio, abbiamo iniziato impostando un semplice esempio di disconnessione con Spring Security, quindi abbiamo discusso le opzioni più avanzate disponibili.

L'implementazione di questo tutorial Spring Logout può essere trovata nel progetto GitHub: questo è un progetto basato su Eclipse, quindi dovrebbe essere facile da importare ed eseguire così com'è.

Quando il progetto viene eseguito in locale, è possibile accedere all'HTML di esempio all'indirizzo:

//localhost:8080/spring-security-mvc-login/login.html