gpt4 book ai didi

spring - 如何在 Spring 3 中以编程方式执行注销

转载 作者:IT老高 更新时间:2023-10-28 13:45:59 25 4
gpt4 key购买 nike

我有一个用于注销的 Spring 配置,如下所示:

<logout logout-url="/abc/logout"
logout-success-url="/abc/login"/>

现在我想以编程方式注销。我如何在 Spring 3 中实现这一点。我需要从具有以下定义的 Controller 之一注销。目前我正在做类似以下的事情......这是个好主意..

 public void suppressUserProfile() {
//...
return "redirect:/abc/logout";
}

最佳答案

这取决于。如果您的应用程序可以将已注销的用户放置在“您已注销”页面上,那么这可能没问题。但是您不能确定您的用户是否真的会被注销(例如,如果浏览器抑制了重定向)。

您可以通过编程方式退出:

public void logout(HttpServletRequest request, HttpServletResponse response) {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
if (auth != null){
new SecurityContextLogoutHandler().logout(request, response, auth);
}
SecurityContextHolder.getContext().setAuthentication(null);
}

正如@LateralFractal 指出的那样,如果您没有更改 SecurityContextLogoutHandler 的默认值(请参阅 https://github.com/spring-projects/spring-security/blob/3.2.x/web/src/main/java/org/springframework/security/web/authentication/logout/SecurityContextLogoutHandler.java#L96 ),您可以将其缩减为

public void logout(HttpServletRequest request) {
new SecurityContextLogoutHandler().logout(request, null, null);
}

甚至(虽然有点丑)

public void logout() {
HttpServletRequest request =
((ServletRequestAttributes)RequestContextHolder.getRequestAttributes())
.getRequest();
new SecurityContextLogoutHandler().logout(request, null, null);

https://stackoverflow.com/a/9767869/1686330有关获取 HttpServletRequest 的一些背景知识。

关于spring - 如何在 Spring 3 中以编程方式执行注销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18957445/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com