Это зависит. Если это нормально для вашего приложения, чтобы поместить выведенного из системы пользователя на странице «вы вышли из системы», это может быть нормально. Но вы не можете быть уверены, что ваш пользователь действительно выйдет из системы (например, если браузер подавляет перенаправление).
Программным вы можете выйти так:
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
.
Редирект будет работать, но почему бы просто не добавить параметр «HttpSevletRequest» в качестве параметра и вызвать метод «logout». (Будет работать только в среде Servlet 3.0 с Spring Security 3.2 (которая в настоящее время находится в RC1). –