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?
Le code suivant fonctionne pour moi (notez qu'il n'a pas logout().disable()
)
http.logout().permitAll();
http.logout().logoutSuccessHandler((new HttpStatusReturningLogoutSuccessHandler(HttpStatus.OK)));
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.
Utilisez cette méthode:
.logout().logoutSuccessUrl("enter address here where you want to go after logout")
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"
/>
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