Déconnexion de Spring Security

1. Vue d'ensemble

Cet article s'appuie sur notre didacticiel de connexion par formulaire et se concentrera sur la configuration de la déconnexion avec Spring Security .

2. Configuration de base

La configuration de base de la fonctionnalité Spring Logout à l'aide de la méthode logout () est assez simple:

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

Et en utilisant la configuration XML:

 ...  

L'élément permet au mécanisme de déconnexion par défaut - qui est configuré pour utiliser les éléments suivants url logout : / fermeture de session qui était autrefois / j_spring_security_logout avant Spring Security 4 .

3. Le JSP et le lien de déconnexion

Poursuivant cet exemple simple, la façon de fournir un lien de déconnexion dans l'application Web est:

Logout 

4. Personnalisations avancées

4.1. logoutSuccessUrl ()

Une fois le processus de déconnexion effectué avec succès, Spring Security redirigera l'utilisateur vers une page spécifiée. Par défaut, il s'agit de la page racine ( "/" ) mais elle est configurable:

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

Cela peut également être fait en utilisant la configuration XML:

Selon l'application, une bonne pratique consiste à rediriger l'utilisateur vers la page de connexion:

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

4.2. logoutUrl ()

Semblable à d'autres valeurs par défaut de Spring Security, l'URL qui déclenche réellement le mécanisme de déconnexion a également une valeur par défaut - / logout .

Il est cependant judicieux de modifier cette valeur par défaut, pour vous assurer qu'aucune information n'est publiée sur le cadre utilisé pour sécuriser l'application:

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

Et via XML:

4.3. invalidateHttpSession et deleteCookies

Ces deux attributs avancés contrôlent l'invalidation de session ainsi qu'une liste de cookies à supprimer lorsque l'utilisateur se déconnecte. En tant que tel, invalidateHttpSession permet à la session d'être configurée afin qu'elle ne soit pas invalidée lors de la déconnexion (c'est vrai par défaut).

La méthode deleteCookies est également simple:

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

Et la version XML:

4.4. logoutSuccessHandler ()

Pour les scénarios plus avancés, où l'espace de noms n'est pas assez flexible, le bean LogoutSuccessHandler du contexte Spring peut être remplacé par une référence personnalisée:

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

La configuration XML équivalente est:

 ... 

Toute logique d'application personnalisée qui doit s'exécuter lorsque l'utilisateur se déconnecte avec succès peut être implémentée avec un gestionnaire de réussite de déconnexion personnalisé. Par exemple - un mécanisme d'audit simple gardant une trace de la dernière page sur laquelle l'utilisateur était lorsqu'il a déclenché la déconnexion:

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); } }

Gardez également à l'esprit que ce bean personnalisé a la responsabilité de déterminer la destination vers laquelle l'utilisateur est dirigé après la déconnexion. Pour cette raison, l'association de l' attribut logoutSuccessHandler avec logoutSuccessUrl ne fonctionnera pas, car les deux couvrent des fonctionnalités similaires.

5. Conclusion

Dans cet exemple, nous avons commencé par configurer un exemple de déconnexion simple avec Spring Security, puis nous avons discuté des options les plus avancées disponibles.

L'implémentation de ce tutoriel Spring Logout se trouve dans le projet GitHub - il s'agit d'un projet basé sur Eclipse, il devrait donc être facile à importer et à exécuter tel quel.

Lorsque le projet s'exécute localement, l'exemple HTML est accessible à l'adresse:

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