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 4c09cb1..5d0e43b 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 @@ -771,6 +771,9 @@ public class RedisOperationsSessionRepository implements * session. */ private void saveDelta() { + if (this.delta.isEmpty()) { + return; + } String sessionId = getId(); getSessionBoundHashOperations(sessionId).putAll(this.delta); String principalSessionKey = getSessionAttrNameKey( @@ -781,7 +784,7 @@ public class RedisOperationsSessionRepository implements || this.delta.containsKey(securityPrincipalSessionKey)) { if (this.originalPrincipalName != null) { String originalPrincipalRedisKey = getPrincipalKey( - (String) this.originalPrincipalName); + this.originalPrincipalName); RedisOperationsSessionRepository.this.sessionRedisOperations .boundSetOps(originalPrincipalRedisKey).remove(sessionId); } diff --git a/spring-session/src/test/java/org/springframework/session/data/redis/RedisOperationsSessionRepositoryTests.java b/spring-session/src/test/java/org/springframework/session/data/redis/RedisOperationsSessionRepositoryTests.java index 4a99f83..035a29a 100644 --- a/spring-session/src/test/java/org/springframework/session/data/redis/RedisOperationsSessionRepositoryTests.java +++ b/spring-session/src/test/java/org/springframework/session/data/redis/RedisOperationsSessionRepositoryTests.java @@ -166,6 +166,16 @@ public class RedisOperationsSessionRepositoryTests { .isEqualTo(session.getCreationTime()); } + // gh-467 + @Test + public void saveSessionNothingChanged() { + RedisSession session = this.redisRepository.new RedisSession(this.cached); + + this.redisRepository.save(session); + + verifyZeroInteractions(this.redisOperations); + } + @Test public void saveJavadocSummary() { RedisSession session = this.redisRepository.createSession(); @@ -202,6 +212,7 @@ public class RedisOperationsSessionRepositoryTests { @Test public void saveJavadoc() { RedisSession session = this.redisRepository.new RedisSession(this.cached); + session.setLastAccessedTime(session.getLastAccessedTime()); given(this.redisOperations.boundHashOps("spring:session:sessions:session-id")) .willReturn(this.boundHashOperations);