我有一个用于注销的spring配置,如下所示:
<logout logout-url="/abc/logout"
logout-success-url="/abc/login"/>
现在,我要以编程方式注销。在Spring 3中如何实现此目的。我需要从具有以下def的控制器之一中注销。目前我正在做类似以下的事情...这是一个好主意..
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/1686330HttpServletRequest
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句