diff --git a/spring-session/src/main/java/org/springframework/session/data/redis/RedisOperationsSessionRepository.java b/spring-session/src/main/java/org/springframework/session/data/redis/RedisOperationsSessionRepository.java index e1b1b26..0f3ad24 100644 --- a/spring-session/src/main/java/org/springframework/session/data/redis/RedisOperationsSessionRepository.java +++ b/spring-session/src/main/java/org/springframework/session/data/redis/RedisOperationsSessionRepository.java @@ -450,6 +450,7 @@ public class RedisOperationsSessionRepository implements FindByIndexNameSessionR return; } + cleanupPrincipalIndex(session); expirationPolicy.onDelete(session); String expireKey = getExpiredKey(session.getId()); @@ -502,10 +503,7 @@ public class RedisOperationsSessionRepository implements FindByIndexNameSessionR logger.debug("Publishing SessionDestroyedEvent for session " + sessionId); } - String principal = PRINCIPAL_NAME_RESOLVER.resolvePrincipal(session); - if(principal != null) { - sessionRedisOperations.boundSetOps(getPrincipalKey(principal)).remove(sessionId); - } + cleanupPrincipalIndex(session); if(isDeleted) { handleDeleted(sessionId, session); @@ -517,6 +515,17 @@ public class RedisOperationsSessionRepository implements FindByIndexNameSessionR } } + private void cleanupPrincipalIndex(RedisSession session) { + if(session == null) { + return; + } + String sessionId = session.getId(); + String principal = PRINCIPAL_NAME_RESOLVER.resolvePrincipal(session); + if(principal != null) { + sessionRedisOperations.boundSetOps(getPrincipalKey(principal)).remove(sessionId); + } + } + public void handleCreated(Map loaded, String channel) { String id = channel.substring(channel.lastIndexOf(":") + 1); ExpiringSession session = loadSession(id, loaded);