diff --git a/core/src/main/java/org/acegisecurity/ui/logout/SecurityContextLogoutHandler.java b/core/src/main/java/org/acegisecurity/ui/logout/SecurityContextLogoutHandler.java index f7649062e9..4f70e7909c 100644 --- a/core/src/main/java/org/acegisecurity/ui/logout/SecurityContextLogoutHandler.java +++ b/core/src/main/java/org/acegisecurity/ui/logout/SecurityContextLogoutHandler.java @@ -18,28 +18,60 @@ package org.acegisecurity.ui.logout; import org.acegisecurity.Authentication; import org.acegisecurity.context.SecurityContextHolder; +import org.springframework.util.Assert; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; /** * Performs a logout by modifying the {@link org.acegisecurity.context.SecurityContextHolder}. * + *

Will also invalidate the {@link HttpSession} if {@link #isInvalidateHttpSession()} is + * true and the session is not null. + * * @author Ben Alex * @version $Id$ */ public class SecurityContextLogoutHandler implements LogoutHandler { //~ Methods ======================================================================================================== + private boolean invalidateHttpSession = true; + /** - * Does not use any arguments. They can all be null. + * Requires the request to be passed in. * - * @param request not used (can be null) + * @param request from which to obtain a HTTP session (cannot be null) * @param response not used (can be null) * @param authentication not used (can be null) */ public void logout(HttpServletRequest request, HttpServletResponse response, Authentication authentication) { - SecurityContextHolder.clearContext(); + Assert.notNull(request, "HttpServletRequest required"); + if (invalidateHttpSession) { + HttpSession session = request.getSession(false); + if (session != null) { + session.invalidate(); + } + } + + SecurityContextHolder.clearContext(); } + + public boolean isInvalidateHttpSession() { + return invalidateHttpSession; + } + + /** + * Causes the {@link HttpSession} to be invalidated when this + * {@link LogoutHandler} is invoked. Defaults to true. + * + * @param invalidateHttpSession true if you wish the session to be + * invalidated (default) or false if it should not be + */ + public void setInvalidateHttpSession(boolean invalidateHttpSession) { + this.invalidateHttpSession = invalidateHttpSession; + } + + }