From aa4ee54f86de155b1659cc34e80882103f3c88ae Mon Sep 17 00:00:00 2001 From: Luke Taylor Date: Thu, 30 Aug 2007 18:22:40 +0000 Subject: [PATCH] Added logging to SessionRegistryImpl. --- .../concurrent/SessionRegistryImpl.java | 46 +++++++++++++------ 1 file changed, 33 insertions(+), 13 deletions(-) diff --git a/core/src/main/java/org/acegisecurity/concurrent/SessionRegistryImpl.java b/core/src/main/java/org/acegisecurity/concurrent/SessionRegistryImpl.java index 628f81df9f..8c5c790eaf 100644 --- a/core/src/main/java/org/acegisecurity/concurrent/SessionRegistryImpl.java +++ b/core/src/main/java/org/acegisecurity/concurrent/SessionRegistryImpl.java @@ -21,6 +21,8 @@ import org.springframework.context.ApplicationEvent; import org.springframework.context.ApplicationListener; import org.springframework.util.Assert; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import java.util.ArrayList; import java.util.Collections; @@ -38,17 +40,21 @@ import javax.servlet.http.HttpSession; * Base implementation of {@link org.acegisecurity.concurrent.SessionRegistry} * which also listens for {@link org.acegisecurity.ui.session.HttpSessionDestroyedEvent}s * published in the Spring application context. - * + * *

* NB: It is important that you register the {@link org.acegisecurity.ui.session.HttpSessionEventPublisher} in * web.xml so that this class is notified of sessions that expire. *

- * + * * @author Ben Alex * @version $Id$ */ public class SessionRegistryImpl implements SessionRegistry, ApplicationListener { - // ~ Instance fields =============================================================================================== + //~ Static fields/initializers ===================================================================================== + + protected static final Log logger = LogFactory.getLog(SessionRegistryImpl.class); + + // ~ Instance fields =============================================================================================== private Map principals = Collections.synchronizedMap(new HashMap()); // private Map sessionIds = Collections.synchronizedMap(new HashMap()); // @@ -68,12 +74,12 @@ public class SessionRegistryImpl implements SessionRegistry, ApplicationListener List list = new ArrayList(); - synchronized (sessionsUsedByPrincipal) { + synchronized (sessionsUsedByPrincipal) { for (Iterator iter = sessionsUsedByPrincipal.iterator(); iter.hasNext();) { String sessionId = (String) iter.next(); SessionInformation sessionInformation = getSessionInformation(sessionId); - if (includeExpiredSessions || !sessionInformation.isExpired()) { + if (includeExpiredSessions || !sessionInformation.isExpired()) { list.add(sessionInformation); } } @@ -105,17 +111,21 @@ public class SessionRegistryImpl implements SessionRegistry, ApplicationListener } } - public synchronized void registerNewSession(String sessionId, Object principal) { + public void registerNewSession(String sessionId, Object principal) { Assert.hasText(sessionId, "SessionId required as per interface contract"); Assert.notNull(principal, "Principal required as per interface contract"); - if (getSessionInformation(sessionId) != null) { + if (logger.isDebugEnabled()) { + logger.debug("Registering session " + sessionId +", for principal " + principal); + } + + if (getSessionInformation(sessionId) != null) { removeSessionInformation(sessionId); } - sessionIds.put(sessionId, new SessionInformation(principal, sessionId, new Date())); + sessionIds.put(sessionId, new SessionInformation(principal, sessionId, new Date())); - Set sessionsUsedByPrincipal = (Set) principals.get(principal); + Set sessionsUsedByPrincipal = (Set) principals.get(principal); if (sessionsUsedByPrincipal == null) { sessionsUsedByPrincipal = Collections.synchronizedSet(new HashSet()); @@ -132,17 +142,27 @@ public class SessionRegistryImpl implements SessionRegistry, ApplicationListener SessionInformation info = getSessionInformation(sessionId); if (info != null) { - sessionIds.remove(sessionId); + if (logger.isDebugEnabled()) { + logger.debug("Removing " + sessionId + " from set of registered sessions"); + } + sessionIds.remove(sessionId); - Set sessionsUsedByPrincipal = (Set) principals.get(info.getPrincipal()); + Set sessionsUsedByPrincipal = (Set) principals.get(info.getPrincipal()); - if (sessionsUsedByPrincipal != null) { + if (sessionsUsedByPrincipal != null) { synchronized (sessionsUsedByPrincipal) { + if (logger.isDebugEnabled()) { + logger.debug("Removing " + sessionId + " from principal's set of registered sessions"); + } + sessionsUsedByPrincipal.remove(sessionId); if (sessionsUsedByPrincipal.size() == 0) { // No need to keep object in principals Map anymore - principals.remove(info.getPrincipal()); + if (logger.isDebugEnabled()) { + logger.debug("Removing principal " + info.getPrincipal() + " from registry"); + } + principals.remove(info.getPrincipal()); } } }