@ -1,4 +1,4 @@
@@ -1,4 +1,4 @@
/ * Copyright 2004 , 2005 Acegi Technology Pty Limited
/ * Copyright 2004 , 2005 , 2006 Acegi Technology Pty Limited
*
* Licensed under the Apache License , Version 2 . 0 ( the "License" ) ;
* you may not use this file except in compliance with the License .
@ -15,6 +15,13 @@
@@ -15,6 +15,13 @@
package org.acegisecurity.concurrent ;
import org.acegisecurity.ui.session.HttpSessionDestroyedEvent ;
import org.springframework.context.ApplicationEvent ;
import org.springframework.context.ApplicationListener ;
import org.springframework.util.Assert ;
import java.util.ArrayList ;
import java.util.Collections ;
import java.util.Date ;
@ -27,18 +34,12 @@ import java.util.Set;
@@ -27,18 +34,12 @@ import java.util.Set;
import javax.servlet.http.HttpSession ;
import org.acegisecurity.ui.session.HttpSessionDestroyedEvent ;
import org.springframework.context.ApplicationEvent ;
import org.springframework.context.ApplicationListener ;
import org.springframework.util.Assert ;
/ * *
* 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 .
* 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 .
*
* < p >
* NB : It is important that you register the { @link
@ -59,21 +60,29 @@ public class SessionRegistryImpl implements SessionRegistry,
@@ -59,21 +60,29 @@ public class SessionRegistryImpl implements SessionRegistry,
//~ Methods ================================================================
public Object [ ] getAllPrincipals ( ) {
return principals . keySet ( ) . toArray ( ) ;
}
public SessionInformation [ ] getAllSessions ( Object principal ) {
Set sessionsUsedByPrincipal = ( Set ) principals . get ( principal ) ;
if ( sessionsUsedByPrincipal = = null ) {
return null ;
}
List list = new ArrayList ( ) ;
Iterator iter = sessionsUsedByPrincipal . iterator ( ) ;
while ( iter . hasNext ( ) ) {
String sessionId = ( String ) iter . next ( ) ;
SessionInformation sessionInformation = getSessionInformation ( sessionId ) ;
if ( ! sessionInformation . isExpired ( ) ) {
list . add ( sessionInformation ) ;
}
synchronized ( sessionsUsedByPrincipal ) {
String sessionId = ( String ) iter . next ( ) ;
SessionInformation sessionInformation = getSessionInformation ( sessionId ) ;
if ( ! sessionInformation . isExpired ( ) ) {
list . add ( sessionInformation ) ;
}
}
}
return ( SessionInformation [ ] ) list . toArray ( new SessionInformation [ ] { } ) ;
@ -134,21 +143,18 @@ public class SessionRegistryImpl implements SessionRegistry,
@@ -134,21 +143,18 @@ public class SessionRegistryImpl implements SessionRegistry,
if ( info ! = null ) {
sessionIds . remove ( sessionId ) ;
Set sessionsUsedByPrincipal = ( Set ) principals . get ( info
. getPrincipal ( ) ) ;
Set sessionsUsedByPrincipal = ( Set ) principals . get ( info . getPrincipal ( ) ) ;
if ( sessionsUsedByPrincipal ! = null ) {
sessionsUsedByPrincipal . remove ( sessionId ) ;
if ( sessionsUsedByPrincipal . size ( ) = = 0 ) {
// No need to keep pbject in principals Map anymore
principals . remove ( info . getPrincipal ( ) ) ;
synchronized ( sessionsUsedByPrincipal ) {
sessionsUsedByPrincipal . remove ( sessionId ) ;
if ( sessionsUsedByPrincipal . size ( ) = = 0 ) {
// No need to keep object in principals Map anymore
principals . remove ( info . getPrincipal ( ) ) ;
}
}
}
}
}
public Object [ ] getAllPrincipals ( ) {
return principals . keySet ( ) . toArray ( ) ;
}
}