From b69b921c3cb257297e0ff7dc8c869eadcee91bbf Mon Sep 17 00:00:00 2001 From: Brandon Clay Date: Sun, 16 Jun 2024 13:05:40 -0700 Subject: [PATCH] Fix #5426 Override setId from StandardSession to detect ID change and invoke rename on the persisted map. Add functions in Session Manager to support calling directly through to super class. Signed-off-by: Brandon Clay --- .../org/redisson/tomcat/RedissonSession.java | 26 +++++++++++++++++++ .../tomcat/RedissonSessionManager.java | 16 ++++++++++-- .../org/redisson/tomcat/RedissonSession.java | 26 +++++++++++++++++++ .../tomcat/RedissonSessionManager.java | 18 ++++++++++--- .../org/redisson/tomcat/RedissonSession.java | 26 +++++++++++++++++++ .../tomcat/RedissonSessionManager.java | 16 ++++++++++-- .../org/redisson/tomcat/RedissonSession.java | 26 +++++++++++++++++++ .../tomcat/RedissonSessionManager.java | 16 ++++++++++-- 8 files changed, 161 insertions(+), 9 deletions(-) diff --git a/redisson-tomcat/redisson-tomcat-10/src/main/java/org/redisson/tomcat/RedissonSession.java b/redisson-tomcat/redisson-tomcat-10/src/main/java/org/redisson/tomcat/RedissonSession.java index 14b2b4838..62693d2bb 100644 --- a/redisson-tomcat/redisson-tomcat-10/src/main/java/org/redisson/tomcat/RedissonSession.java +++ b/redisson-tomcat/redisson-tomcat-10/src/main/java/org/redisson/tomcat/RedissonSession.java @@ -392,6 +392,32 @@ public class RedissonSession extends StandardSession { } } + @Override + public void setId(String id, boolean notify) { + if ((this.id != null) && (manager != null)) { + redissonManager.superRemove(this); + if (map == null) { + map = redissonManager.getMap(this.id); + } + map.rename(redissonManager.getTomcatSessionKeyName(id)); + } + + boolean idWasNull = this.id == null; + this.id = id; + + if (manager != null) { + if (idWasNull) { + redissonManager.add(this); + } else { + redissonManager.superAdd(this); + } + } + + if (notify) { + tellNew(); + } + } + public void save() { if (map == null) { map = redissonManager.getMap(id); diff --git a/redisson-tomcat/redisson-tomcat-10/src/main/java/org/redisson/tomcat/RedissonSessionManager.java b/redisson-tomcat/redisson-tomcat-10/src/main/java/org/redisson/tomcat/RedissonSessionManager.java index bf1fa7829..ff211bc80 100644 --- a/redisson-tomcat/redisson-tomcat-10/src/main/java/org/redisson/tomcat/RedissonSessionManager.java +++ b/redisson-tomcat/redisson-tomcat-10/src/main/java/org/redisson/tomcat/RedissonSessionManager.java @@ -144,9 +144,13 @@ public class RedissonSessionManager extends ManagerBase { return redisson.getSet(name, StringCodec.INSTANCE); } - public RMap getMap(String sessionId) { + public String getTomcatSessionKeyName(String sessionId) { String separator = keyPrefix == null || keyPrefix.isEmpty() ? "" : ":"; - String name = keyPrefix + separator + "redisson:tomcat_session:" + sessionId; + return keyPrefix + separator + "redisson:tomcat_session:" + sessionId; + } + + public RMap getMap(String sessionId) { + String name = getTomcatSessionKeyName(sessionId); return redisson.getMap(name, new CompositeCodec(StringCodec.INSTANCE, codecToUse, codecToUse)); } @@ -212,6 +216,10 @@ public class RedissonSessionManager extends ManagerBase { return session; } + public void superRemove(Session session) { + super.remove(session, false); + } + @Override public void remove(Session session, boolean update) { super.remove(session, update); @@ -221,6 +229,10 @@ public class RedissonSessionManager extends ManagerBase { } } + public void superAdd(Session session) { + super.add(session); + } + @Override public void add(Session session) { super.add(session); diff --git a/redisson-tomcat/redisson-tomcat-7/src/main/java/org/redisson/tomcat/RedissonSession.java b/redisson-tomcat/redisson-tomcat-7/src/main/java/org/redisson/tomcat/RedissonSession.java index bada7a421..50c46b0bf 100644 --- a/redisson-tomcat/redisson-tomcat-7/src/main/java/org/redisson/tomcat/RedissonSession.java +++ b/redisson-tomcat/redisson-tomcat-7/src/main/java/org/redisson/tomcat/RedissonSession.java @@ -410,6 +410,32 @@ public class RedissonSession extends StandardSession { } } + @Override + public void setId(String id, boolean notify) { + if ((this.id != null) && (manager != null)) { + redissonManager.superRemove(this); + if (map == null) { + map = redissonManager.getMap(this.id); + } + map.rename(redissonManager.getTomcatSessionKeyName(id)); + } + + boolean idWasNull = this.id == null; + this.id = id; + + if (manager != null) { + if (idWasNull) { + redissonManager.add(this); + } else { + redissonManager.superAdd(this); + } + } + + if (notify) { + tellNew(); + } + } + public void save() { if (map == null) { map = redissonManager.getMap(id); diff --git a/redisson-tomcat/redisson-tomcat-7/src/main/java/org/redisson/tomcat/RedissonSessionManager.java b/redisson-tomcat/redisson-tomcat-7/src/main/java/org/redisson/tomcat/RedissonSessionManager.java index 52a40fba1..1cc200d2b 100644 --- a/redisson-tomcat/redisson-tomcat-7/src/main/java/org/redisson/tomcat/RedissonSessionManager.java +++ b/redisson-tomcat/redisson-tomcat-7/src/main/java/org/redisson/tomcat/RedissonSessionManager.java @@ -143,10 +143,14 @@ public class RedissonSessionManager extends ManagerBase { String name = keyPrefix + separator + "redisson:tomcat_notified_nodes:" + sessionId; return redisson.getSet(name, StringCodec.INSTANCE); } - - public RMap getMap(String sessionId) { + + public String getTomcatSessionKeyName(String sessionId) { String separator = keyPrefix == null || keyPrefix.isEmpty() ? "" : ":"; - String name = keyPrefix + separator + "redisson:tomcat_session:" + sessionId; + return keyPrefix + separator + "redisson:tomcat_session:" + sessionId; + } + + public RMap getMap(String sessionId) { + String name = getTomcatSessionKeyName(sessionId); return redisson.getMap(name, new CompositeCodec(StringCodec.INSTANCE, codecToUse, codecToUse)); } @@ -212,6 +216,10 @@ public class RedissonSessionManager extends ManagerBase { return session; } + public void superRemove(Session session) { + super.remove(session, false); + } + @Override public void remove(Session session, boolean update) { super.remove(session, update); @@ -221,6 +229,10 @@ public class RedissonSessionManager extends ManagerBase { } } + public void superAdd(Session session) { + super.add(session); + } + @Override public void add(Session session) { super.add(session); diff --git a/redisson-tomcat/redisson-tomcat-8/src/main/java/org/redisson/tomcat/RedissonSession.java b/redisson-tomcat/redisson-tomcat-8/src/main/java/org/redisson/tomcat/RedissonSession.java index 3b7d64d79..52c6825cd 100644 --- a/redisson-tomcat/redisson-tomcat-8/src/main/java/org/redisson/tomcat/RedissonSession.java +++ b/redisson-tomcat/redisson-tomcat-8/src/main/java/org/redisson/tomcat/RedissonSession.java @@ -387,6 +387,32 @@ public class RedissonSession extends StandardSession { } } + @Override + public void setId(String id, boolean notify) { + if ((this.id != null) && (manager != null)) { + redissonManager.superRemove(this); + if (map == null) { + map = redissonManager.getMap(this.id); + } + map.rename(redissonManager.getTomcatSessionKeyName(id)); + } + + boolean idWasNull = this.id == null; + this.id = id; + + if (manager != null) { + if (idWasNull) { + redissonManager.add(this); + } else { + redissonManager.superAdd(this); + } + } + + if (notify) { + tellNew(); + } + } + public void save() { if (map == null) { map = redissonManager.getMap(id); diff --git a/redisson-tomcat/redisson-tomcat-8/src/main/java/org/redisson/tomcat/RedissonSessionManager.java b/redisson-tomcat/redisson-tomcat-8/src/main/java/org/redisson/tomcat/RedissonSessionManager.java index 5fcf7c27c..d1475c484 100644 --- a/redisson-tomcat/redisson-tomcat-8/src/main/java/org/redisson/tomcat/RedissonSessionManager.java +++ b/redisson-tomcat/redisson-tomcat-8/src/main/java/org/redisson/tomcat/RedissonSessionManager.java @@ -144,9 +144,13 @@ public class RedissonSessionManager extends ManagerBase { return redisson.getSet(name, StringCodec.INSTANCE); } - public RMap getMap(String sessionId) { + public String getTomcatSessionKeyName(String sessionId) { String separator = keyPrefix == null || keyPrefix.isEmpty() ? "" : ":"; - String name = keyPrefix + separator + "redisson:tomcat_session:" + sessionId; + return keyPrefix + separator + "redisson:tomcat_session:" + sessionId; + } + + public RMap getMap(String sessionId) { + String name = getTomcatSessionKeyName(sessionId); return redisson.getMap(name, new CompositeCodec(StringCodec.INSTANCE, codecToUse, codecToUse)); } @@ -212,6 +216,10 @@ public class RedissonSessionManager extends ManagerBase { return session; } + public void superRemove(Session session) { + super.remove(session, false); + } + @Override public void remove(Session session, boolean update) { super.remove(session, update); @@ -221,6 +229,10 @@ public class RedissonSessionManager extends ManagerBase { } } + public void superAdd(Session session) { + super.add(session); + } + @Override public void add(Session session) { super.add(session); diff --git a/redisson-tomcat/redisson-tomcat-9/src/main/java/org/redisson/tomcat/RedissonSession.java b/redisson-tomcat/redisson-tomcat-9/src/main/java/org/redisson/tomcat/RedissonSession.java index 6002f511f..1482c3fbb 100644 --- a/redisson-tomcat/redisson-tomcat-9/src/main/java/org/redisson/tomcat/RedissonSession.java +++ b/redisson-tomcat/redisson-tomcat-9/src/main/java/org/redisson/tomcat/RedissonSession.java @@ -387,6 +387,32 @@ public class RedissonSession extends StandardSession { } } + @Override + public void setId(String id, boolean notify) { + if ((this.id != null) && (manager != null)) { + redissonManager.superRemove(this); + if (map == null) { + map = redissonManager.getMap(this.id); + } + map.rename(redissonManager.getTomcatSessionKeyName(id)); + } + + boolean idWasNull = this.id == null; + this.id = id; + + if (manager != null) { + if (idWasNull) { + redissonManager.add(this); + } else { + redissonManager.superAdd(this); + } + } + + if (notify) { + tellNew(); + } + } + public void save() { if (map == null) { map = redissonManager.getMap(id); diff --git a/redisson-tomcat/redisson-tomcat-9/src/main/java/org/redisson/tomcat/RedissonSessionManager.java b/redisson-tomcat/redisson-tomcat-9/src/main/java/org/redisson/tomcat/RedissonSessionManager.java index 5fcf7c27c..d1475c484 100644 --- a/redisson-tomcat/redisson-tomcat-9/src/main/java/org/redisson/tomcat/RedissonSessionManager.java +++ b/redisson-tomcat/redisson-tomcat-9/src/main/java/org/redisson/tomcat/RedissonSessionManager.java @@ -144,9 +144,13 @@ public class RedissonSessionManager extends ManagerBase { return redisson.getSet(name, StringCodec.INSTANCE); } - public RMap getMap(String sessionId) { + public String getTomcatSessionKeyName(String sessionId) { String separator = keyPrefix == null || keyPrefix.isEmpty() ? "" : ":"; - String name = keyPrefix + separator + "redisson:tomcat_session:" + sessionId; + return keyPrefix + separator + "redisson:tomcat_session:" + sessionId; + } + + public RMap getMap(String sessionId) { + String name = getTomcatSessionKeyName(sessionId); return redisson.getMap(name, new CompositeCodec(StringCodec.INSTANCE, codecToUse, codecToUse)); } @@ -212,6 +216,10 @@ public class RedissonSessionManager extends ManagerBase { return session; } + public void superRemove(Session session) { + super.remove(session, false); + } + @Override public void remove(Session session, boolean update) { super.remove(session, update); @@ -221,6 +229,10 @@ public class RedissonSessionManager extends ManagerBase { } } + public void superAdd(Session session) { + super.add(session); + } + @Override public void add(Session session) { super.add(session);