Tùy theo. Nếu ứng dụng của bạn có thể đặt người dùng đã đăng xuất trên trang "bạn đã đăng xuất" thì điều này có thể được chấp nhận. Nhưng bạn không thể chắc chắn liệu người dùng của mình có thực sự bị đăng xuất hay không (ví dụ: nếu trình duyệt đang chặn chuyển hướng).
lập trình bạn có thể thoát ra theo cách này:
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);
}
Như @LateralFractal chỉ ra, nếu bạn chưa thay đổi giá trị mặc định của SecurityContextLogoutHandler
(xem https://github.com/spring-projects/spring-security/blob/3.2.x/web/src/main/java/org/springframework/security/web/authentication/logout/SecurityContextLogoutHandler.java#L96), bạn có thể cắt này xuống
public void logout(HttpServletRequest request) {
new SecurityContextLogoutHandler().logout(request, null, null);
}
hoặc thậm chí (mặc dù đó là một chút xấu xí)
public void logout() {
HttpServletRequest request =
((ServletRequestAttributes)RequestContextHolder.getRequestAttributes())
.getRequest();
new SecurityContextLogoutHandler().logout(request, null, null);
Xem https://stackoverflow.com/a/9767869/1686330 để biết một số thông tin cơ bản về cách nhận được HttpServletRequest
.
Nguồn
2013-09-23 11:10:31
Chuyển hướng sẽ hoạt động nhưng tại sao không chỉ thêm 'HttpSevletRequest' làm tham số và gọi phương thức' logout'. (Sẽ chỉ làm việc trong môi trường Servlet 3.0 với Spring Security 3.2 (hiện tại đang trong RC1) –