web-dev-qa-db-fra.com

Implémenter la fonctionnalité de «déconnexion» dans Spring Boot

Pour faire fonctionner une fonctionnalité de sécurité de base, j'ai ajouté le package de démarrage suivant à mon pom.xml

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>

Et ajouté les deux propriétés suivantes à application.properties:

security.user.name = invité
security.user.password = tigre

Maintenant, lorsque j'accède à ma page d'accueil, je reçois la boîte de connexion et la connexion fonctionne comme prévu.

Maintenant, je veux implémenter la fonctionnalité de "déconnexion". Fondamentalement, lorsque l'utilisateur clique sur un lien, il se déconnecte. J'ai remarqué que la connexion n'ajoute aucun cookie dans mon navigateur. Je suppose que Spring Security crée un objet HttpSession pour l'utilisateur. Est-ce vrai? Dois-je "invalider" cette session et rediriger l'utilisateur vers une autre page? Quelle est la meilleure façon d’implémenter la fonctionnalité de "déconnexion" dans une application basée sur Sprint Boot?

26
DilTeam

Mieux vaut tard que jamais. Spring Boot utilise par défaut de nombreux composants de sécurité pour vous, y compris la protection CSRF. L'une des choses que cela fait est de forcer la déconnexion POST, voir ici: http://docs.spring.io/spring-security/site/docs/3.2.4.RELEASE/reference/htmlsingle/# csrf-logout

Comme cela le suggère, vous pouvez remplacer cela en utilisant quelque chose comme:

http.authorizeRequests()
.antMatchers("/admin/**").hasRole("ADMIN")                                      
.anyRequest().fullyAuthenticated()
.and()
.formLogin().loginPage("/login").failureUrl("/login?error").permitAll()
.and()
.logout().logoutRequestMatcher(new AntPathRequestMatcher("/logout")).logoutSuccessUrl("/login");

La dernière ligne est la plus importante.

79
mmeany