web-dev-qa-db-fra.com

Sécurité de printemps - Désactiver la redirection de déconnexion

J'utilise la sécurité de printemps avec REST et j'utilise l'URL (/logout) comme point de terminaison pour ma méthode de déconnexion. Mais après avoir appelé cette méthode, il me redirige vers (/login?logout), je sais que c’est la variable printanière logOutSuccessUrl. Et je veux me débarrasser de la redirection. Ceci est mon code:

protected void configure(HttpSecurity http) throws Exception {

    http.authorizeRequests()
         .antMatchers("/login").permitAll()
         .anyRequest().fullyAuthenticated()
         .and().requiresChannel().anyRequest().requiresSecure()
         .and().httpBasic().disable().logout()
         .disable()
       //  .logoutSuccessHandler(new HttpStatusReturningLogoutSuccessHandler(HttpStatus.OK))
          .csrf().disable();

}

J'ai essayé d'utiliser HttpStatusReturningLogoutSuccessHandler mais cela n'a pas fonctionné, et même régler logoutSuccessUrl() ne change rien.

Savez-vous comment puis-je désactiver cette redirection?

12
uncallable

Le code suivant fonctionne pour moi (notez qu'il n'a pas logout().disable())

http.logout().permitAll();
http.logout().logoutSuccessHandler((new HttpStatusReturningLogoutSuccessHandler(HttpStatus.OK)));
23
Tahir Akhtar

Donc, comme il n’ya pas encore de réponse acceptée, je publie ma solution, qui a fonctionné pour moi:

.logout()
.logoutUrl("/api/user/logout")
.permitAll()
.logoutSuccessHandler((httpServletRequest, httpServletResponse, authentication) -> {
    httpServletResponse.setStatus(HttpServletResponse.SC_OK);
})
.and()

Il suffit de renvoyer un HTTP_OK (200) propre après une déconnexion réussie - Spring ne vous redirigera pas dans ce cas.

10
Sebastian

Utilisez cette méthode:

.logout().logoutSuccessUrl("enter address here where you want to go after logout")
2
Ahmad

Pour ceux qui utilisent la configuration XML, voici l'extrait équivalent à celui donné par Tahir Akhtar .

Dans l'élément <http>, configurez l'élément <logout> comme suit:

<logout
    logout-url          = "/some/path/for/logout"
    invalidate-session  = "true"
    delete-cookies      = "JSESSIONID"
    success-handler-ref = "httpStatusReturningLogoutSuccessHandler"
/>

Et définissez le bean httpStatusReturningLogoutSuccessHandler comme suit:

<bean
    id      = "httpStatusReturningLogoutSuccessHandler"
    class   = "org.springframework.security.web.authentication.logout.HttpStatusReturningLogoutSuccessHandler"
/>
1
Younes

Vous voudrez peut-être essayer ceci

http.logout (). logoutRequestMatcher (new AntPathRequestMatcher ("/ thisistomisleadlogoutfilter"));

Ceci redirige effectivement/thisistomisleadlogoutfilter vers la connexion? La déconnexion. En tant que tel, vous devriez pouvoir utiliser/logout à la place

1
user3888170