@ -132,13 +132,18 @@ public class SessionRegistryImpl implements SessionRegistry,
@@ -132,13 +132,18 @@ public class SessionRegistryImpl implements SessionRegistry,
sessionIds . put ( sessionId ,
new SessionInformation ( principal , sessionId , new Date ( ) ) ) ;
Set < String > sessionsUsedByPrincipal = principals . computeIfAbsent ( principal , key - > new CopyOnWriteArraySet < > ( ) ) ;
sessionsUsedByPrincipal . add ( sessionId ) ;
principals . compute ( principal , ( key , sessionsUsedByPrincipal ) - > {
if ( sessionsUsedByPrincipal = = null ) {
sessionsUsedByPrincipal = new CopyOnWriteArraySet < > ( ) ;
}
sessionsUsedByPrincipal . add ( sessionId ) ;
if ( logger . isTraceEnabled ( ) ) {
logger . trace ( "Sessions used by '" + principal + "' : "
+ sessionsUsedByPrincipal ) ;
}
if ( logger . isTraceEnabled ( ) ) {
logger . trace ( "Sessions used by '" + principal + "' : "
+ sessionsUsedByPrincipal ) ;
}
return sessionsUsedByPrincipal ;
} ) ;
}
public void removeSessionInformation ( String sessionId ) {
@ -157,32 +162,29 @@ public class SessionRegistryImpl implements SessionRegistry,
@@ -157,32 +162,29 @@ public class SessionRegistryImpl implements SessionRegistry,
sessionIds . remove ( sessionId ) ;
Set < String > sessionsUsedByPrincipal = principals . get ( info . getPrincipal ( ) ) ;
if ( sessionsUsedByPrincipal = = null ) {
return ;
}
if ( logger . isDebugEnabled ( ) ) {
logger . debug ( "Removing session " + sessionId
+ " from principal's set of registered sessions" ) ;
}
principals . computeIfPresent ( info . getPrincipal ( ) , ( key , sessionsUsedByPrincipal ) - > {
if ( logger . isDebugEnabled ( ) ) {
logger . debug ( "Removing session " + sessionId
+ " from principal's set of registered sessions" ) ;
}
sessionsUsedByPrincipal . remove ( sessionId ) ;
sessionsUsedByPrincipal . remove ( sessionId ) ;
if ( sessionsUsedByPrincipal . isEmpty ( ) ) {
// No need to keep object in principals Map anymore
if ( logger . isDebugEnabled ( ) ) {
logger . debug ( "Removing principal " + info . getPrincipal ( )
+ " from registry" ) ;
if ( sessionsUsedByPrincipal . isEmpty ( ) ) {
// No need to keep object in principals Map anymore
if ( logger . isDebugEnabled ( ) ) {
logger . debug ( "Removing principal " + info . getPrincipal ( )
+ " from registry" ) ;
}
sessionsUsedByPrincipal = null ;
}
principals . remove ( info . getPrincipal ( ) ) ;
}
if ( logger . isTraceEnabled ( ) ) {
logger . trace ( "Sessions used by '" + info . getPrincipal ( ) + "' : "
+ sessionsUsedByPrincipal ) ;
}
if ( logger . isTraceEnabled ( ) ) {
logger . trace ( "Sessions used by '" + info . getPrincipal ( ) + "' : "
+ sessionsUsedByPrincipal ) ;
}
return sessionsUsedByPrincipal ;
} ) ;
}
}