From 36d349f3286a345c0330bfae468337adfaa0f75b Mon Sep 17 00:00:00 2001 From: Vedran Pavic Date: Fri, 10 Nov 2017 22:55:14 +0100 Subject: [PATCH] Polish contribution Closes gh-919 --- docs/src/docs/asciidoc/index.adoc | 2 +- ...ctiveRedisOperationsSessionRepository.java | 12 +++--- .../RedisOperationsSessionRepository.java | 20 ++++----- .../web/http/EnableRedisHttpSession.java | 8 ++-- .../web/server/EnableRedisWebSession.java | 8 ++-- ...RedisOperationsSessionRepositoryTests.java | 3 +- ...RedisOperationsSessionRepositoryTests.java | 41 ++++--------------- .../RedisWebSessionConfigurationTests.java | 2 +- 8 files changed, 36 insertions(+), 60 deletions(-) diff --git a/docs/src/docs/asciidoc/index.adoc b/docs/src/docs/asciidoc/index.adoc index e5509f83..ad5e4aaa 100644 --- a/docs/src/docs/asciidoc/index.adoc +++ b/docs/src/docs/asciidoc/index.adoc @@ -545,7 +545,7 @@ Complete example usage can be found in the <> You can use the following attributes to customize the configuration: * **maxInactiveIntervalInSeconds** - the amount of time before the session will expire in seconds -* **redisNamespace** - allows configuring an application specific namespace for the sessions. Redis keys and channel ids will start with the prefix of `spring:session::`. +* **redisNamespace** - allows configuring an application specific namespace for the sessions. Redis keys and channel ids will start with the prefix of `:`. * **redisFlushMode** - allows specifying when data will be written to Redis. The default is only when `save` is invoked on `SessionRepository`. A value of `RedisFlushMode.IMMEDIATE` will write to Redis as soon as possible. diff --git a/spring-session-data-redis/src/main/java/org/springframework/session/data/redis/ReactiveRedisOperationsSessionRepository.java b/spring-session-data-redis/src/main/java/org/springframework/session/data/redis/ReactiveRedisOperationsSessionRepository.java index a33bdc7b..5c1001b8 100644 --- a/spring-session-data-redis/src/main/java/org/springframework/session/data/redis/ReactiveRedisOperationsSessionRepository.java +++ b/spring-session-data-redis/src/main/java/org/springframework/session/data/redis/ReactiveRedisOperationsSessionRepository.java @@ -43,9 +43,9 @@ public class ReactiveRedisOperationsSessionRepository implements ReactiveSessionRepository { /** - * The default prefix for each key and channel in Redis used by Spring Session. + * The default namespace for each key and channel in Redis used by Spring Session. */ - static final String DEFAULT_SPRING_SESSION_REDIS_PREFIX = "spring:session:"; + public static final String DEFAULT_NAMESPACE = "spring:session:"; /** * The key in the Hash representing {@link Session#getCreationTime()}. @@ -73,9 +73,9 @@ public class ReactiveRedisOperationsSessionRepository implements private final ReactiveRedisOperations sessionRedisOperations; /** - * The prefix for every key used by Spring Session in Redis. + * The namespace for every key used by Spring Session in Redis. */ - private String keyPrefix = DEFAULT_SPRING_SESSION_REDIS_PREFIX; + private String namespace = DEFAULT_NAMESPACE; /** * If non-null, this value is used to override the default value for @@ -93,7 +93,7 @@ public class ReactiveRedisOperationsSessionRepository implements public void setRedisKeyNamespace(String namespace) { Assert.hasText(namespace, "namespace cannot be null or empty"); - this.keyPrefix = namespace.trim() + ":"; + this.namespace = namespace.trim() + ":"; } /** @@ -167,7 +167,7 @@ public class ReactiveRedisOperationsSessionRepository implements } private String getSessionKey(String sessionId) { - return this.keyPrefix + "sessions:" + sessionId; + return this.namespace + "sessions:" + sessionId; } /** diff --git a/spring-session-data-redis/src/main/java/org/springframework/session/data/redis/RedisOperationsSessionRepository.java b/spring-session-data-redis/src/main/java/org/springframework/session/data/redis/RedisOperationsSessionRepository.java index cc8b970e..de3fffb3 100644 --- a/spring-session-data-redis/src/main/java/org/springframework/session/data/redis/RedisOperationsSessionRepository.java +++ b/spring-session-data-redis/src/main/java/org/springframework/session/data/redis/RedisOperationsSessionRepository.java @@ -253,9 +253,9 @@ public class RedisOperationsSessionRepository implements static PrincipalNameResolver PRINCIPAL_NAME_RESOLVER = new PrincipalNameResolver(); /** - * The default prefix for each key and channel in Redis used by Spring Session. + * The default namespace for each key and channel in Redis used by Spring Session. */ - static final String DEFAULT_SPRING_SESSION_REDIS_PREFIX = "spring:session:"; + public static final String DEFAULT_NAMESPACE = "spring:session:"; /** * The key in the Hash representing @@ -285,9 +285,9 @@ public class RedisOperationsSessionRepository implements static final String SESSION_ATTR_PREFIX = "sessionAttr:"; /** - * The prefix for every key used by Spring Session in Redis. + * The namespace for every key used by Spring Session in Redis. */ - private String keyPrefix = DEFAULT_SPRING_SESSION_REDIS_PREFIX; + private String namespace = DEFAULT_NAMESPACE; private final RedisOperations sessionRedisOperations; @@ -589,7 +589,7 @@ public class RedisOperationsSessionRepository implements public void setRedisKeyNamespace(String namespace) { Assert.hasText(namespace, "namespace cannot be null or empty"); - this.keyPrefix = namespace.trim() + ":"; + this.namespace = namespace.trim() + ":"; } /** @@ -599,17 +599,17 @@ public class RedisOperationsSessionRepository implements * @return the Hash key for this session by prefixing it appropriately. */ String getSessionKey(String sessionId) { - return this.keyPrefix + "sessions:" + sessionId; + return this.namespace + "sessions:" + sessionId; } String getPrincipalKey(String principalName) { - return this.keyPrefix + "index:" + return this.namespace + "index:" + FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME + ":" + principalName; } String getExpirationsKey(long expiration) { - return this.keyPrefix + "expirations:" + expiration; + return this.namespace + "expirations:" + expiration; } private String getExpiredKey(String sessionId) { @@ -621,7 +621,7 @@ public class RedisOperationsSessionRepository implements } private String getExpiredKeyPrefix() { - return this.keyPrefix + "sessions:" + "expires:"; + return this.namespace + "sessions:" + "expires:"; } /** @@ -631,7 +631,7 @@ public class RedisOperationsSessionRepository implements * @return the prefix for the channel that SessionCreatedEvent are published to */ public String getSessionCreatedChannelPrefix() { - return this.keyPrefix + "event:created:"; + return this.namespace + "event:created:"; } /** diff --git a/spring-session-data-redis/src/main/java/org/springframework/session/data/redis/config/annotation/web/http/EnableRedisHttpSession.java b/spring-session-data-redis/src/main/java/org/springframework/session/data/redis/config/annotation/web/http/EnableRedisHttpSession.java index 5c14a3de..f43f6c30 100644 --- a/spring-session-data-redis/src/main/java/org/springframework/session/data/redis/config/annotation/web/http/EnableRedisHttpSession.java +++ b/spring-session-data-redis/src/main/java/org/springframework/session/data/redis/config/annotation/web/http/EnableRedisHttpSession.java @@ -28,6 +28,7 @@ import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.session.SessionRepository; import org.springframework.session.config.annotation.web.http.EnableSpringHttpSession; import org.springframework.session.data.redis.RedisFlushMode; +import org.springframework.session.data.redis.RedisOperationsSessionRepository; /** * Add this annotation to an {@code @Configuration} class to expose the @@ -72,9 +73,8 @@ public @interface EnableRedisHttpSession { /** *

* Defines a unique namespace for keys. The value is used to isolate sessions by - * changing the prefix from "spring:session:" to - * "spring:session:<redisNamespace>:". The default is "" such that all Redis - * keys begin with "spring:session". + * changing the prefix from default {@code spring:session:} to + * {@code :}. *

* *

@@ -85,7 +85,7 @@ public @interface EnableRedisHttpSession { * * @return the unique namespace for keys */ - String redisNamespace() default ""; + String redisNamespace() default RedisOperationsSessionRepository.DEFAULT_NAMESPACE; /** *

diff --git a/spring-session-data-redis/src/main/java/org/springframework/session/data/redis/config/annotation/web/server/EnableRedisWebSession.java b/spring-session-data-redis/src/main/java/org/springframework/session/data/redis/config/annotation/web/server/EnableRedisWebSession.java index 7512f4ba..8f4bf9f7 100644 --- a/spring-session-data-redis/src/main/java/org/springframework/session/data/redis/config/annotation/web/server/EnableRedisWebSession.java +++ b/spring-session-data-redis/src/main/java/org/springframework/session/data/redis/config/annotation/web/server/EnableRedisWebSession.java @@ -26,6 +26,7 @@ import org.springframework.data.redis.connection.ReactiveRedisConnectionFactory; import org.springframework.session.ReactiveSessionRepository; import org.springframework.session.Session; import org.springframework.session.config.annotation.web.server.EnableSpringWebSession; +import org.springframework.session.data.redis.ReactiveRedisOperationsSessionRepository; import org.springframework.session.data.redis.RedisFlushMode; /** @@ -65,9 +66,8 @@ public @interface EnableRedisWebSession { /** *

* Defines a unique namespace for keys. The value is used to isolate sessions by - * changing the prefix from {@code spring:session:} to - * {@code spring:session::}. The default is "" such that all Redis - * keys begin with {@code spring:session:}. + * changing the prefix from default {@code spring:session:} to + * {@code :}. *

* *

@@ -78,7 +78,7 @@ public @interface EnableRedisWebSession { * * @return the unique namespace for keys */ - String redisNamespace() default ""; + String redisNamespace() default ReactiveRedisOperationsSessionRepository.DEFAULT_NAMESPACE; /** *

diff --git a/spring-session-data-redis/src/test/java/org/springframework/session/data/redis/ReactiveRedisOperationsSessionRepositoryTests.java b/spring-session-data-redis/src/test/java/org/springframework/session/data/redis/ReactiveRedisOperationsSessionRepositoryTests.java index 1ad4e89f..4c6d2ba0 100644 --- a/spring-session-data-redis/src/test/java/org/springframework/session/data/redis/ReactiveRedisOperationsSessionRepositoryTests.java +++ b/spring-session-data-redis/src/test/java/org/springframework/session/data/redis/ReactiveRedisOperationsSessionRepositoryTests.java @@ -85,7 +85,8 @@ public class ReactiveRedisOperationsSessionRepositoryTests { public void customRedisKeyNamespace() { this.repository.setRedisKeyNamespace("test"); - assertThat(ReflectionTestUtils.getField(this.repository, "keyPrefix")).isEqualTo("test:"); + assertThat(ReflectionTestUtils.getField(this.repository, "namespace")) + .isEqualTo("test:"); } @Test diff --git a/spring-session-data-redis/src/test/java/org/springframework/session/data/redis/RedisOperationsSessionRepositoryTests.java b/spring-session-data-redis/src/test/java/org/springframework/session/data/redis/RedisOperationsSessionRepositoryTests.java index e21c8176..9cf5a4a0 100644 --- a/spring-session-data-redis/src/test/java/org/springframework/session/data/redis/RedisOperationsSessionRepositoryTests.java +++ b/spring-session-data-redis/src/test/java/org/springframework/session/data/redis/RedisOperationsSessionRepositoryTests.java @@ -16,7 +16,6 @@ package org.springframework.session.data.redis; -import java.text.MessageFormat; import java.time.Duration; import java.time.Instant; import java.time.temporal.ChronoUnit; @@ -710,26 +709,8 @@ public class RedisOperationsSessionRepositoryTests { this.redisRepository.setRedisFlushMode(null); } - @Test - public void testDefaultRedisNamespace() { - RedisSession session = this.redisRepository.new RedisSession(new MapSession()); - session.setMaxInactiveInterval(Duration.ZERO); - given(this.redisOperations.boundHashOps(anyString())) - .willReturn(this.boundHashOperations); - given(this.redisOperations.boundSetOps(anyString())) - .willReturn(this.boundSetOperations); - - this.redisRepository.save(session); - - String id = session.getId(); - verify(this.redisOperations, atLeastOnce()) - .delete(getKey("expires:" + id)); - verify(this.redisOperations, never()).boundValueOps(getKey("expires:" + id)); - } - - @Test - public void testRedisNamespaceChange() { + public void changeRedisNamespace() { String namespace = "foo:bar"; this.redisRepository.setRedisKeyNamespace(namespace); RedisSession session = this.redisRepository.new RedisSession(new MapSession()); @@ -743,29 +724,23 @@ public class RedisOperationsSessionRepositoryTests { String id = session.getId(); verify(this.redisOperations, atLeastOnce()) - .delete(getKeyWithinNamespace(namespace, "expires:" + id)); - verify(this.redisOperations, never()).boundValueOps(getKeyWithinNamespace(namespace, "expires:" + id)); + .delete(namespace + ":sessions:expires:" + id); + verify(this.redisOperations, never()) + .boundValueOps(namespace + ":sessions:expires:" + id); } @Test(expected = IllegalArgumentException.class) - public void testLaunchExceptionOnNullNamespace() { + public void setRedisKeyNamespaceNullNamespace() { this.redisRepository.setRedisKeyNamespace(null); } @Test(expected = IllegalArgumentException.class) - public void testLaunchExceptionOnEmptyNamespace() { - this.redisRepository.setRedisKeyNamespace(""); + public void setRedisKeyNamespaceEmptyNamespace() { + this.redisRepository.setRedisKeyNamespace(" "); } private String getKey(String id) { - return getKeyWithinNamespace("spring:session", id); - } - - private String getKeyWithinNamespace(String prefix, String id) { - if (prefix.endsWith(":")) { - prefix = prefix.substring(0, prefix.length()); - } - return MessageFormat.format("{0}:sessions:{1}", prefix, id); + return "spring:session:sessions:" + id; } private Map map(Object... objects) { diff --git a/spring-session-data-redis/src/test/java/org/springframework/session/data/redis/config/annotation/web/server/RedisWebSessionConfigurationTests.java b/spring-session-data-redis/src/test/java/org/springframework/session/data/redis/config/annotation/web/server/RedisWebSessionConfigurationTests.java index 9b06ecb2..8a909cc9 100644 --- a/spring-session-data-redis/src/test/java/org/springframework/session/data/redis/config/annotation/web/server/RedisWebSessionConfigurationTests.java +++ b/spring-session-data-redis/src/test/java/org/springframework/session/data/redis/config/annotation/web/server/RedisWebSessionConfigurationTests.java @@ -81,7 +81,7 @@ public class RedisWebSessionConfigurationTests { ReactiveRedisOperationsSessionRepository repository = this.context .getBean(ReactiveRedisOperationsSessionRepository.class); assertThat(repository).isNotNull(); - assertThat(ReflectionTestUtils.getField(repository, "keyPrefix")) + assertThat(ReflectionTestUtils.getField(repository, "namespace")) .isEqualTo(REDIS_NAMESPACE + ":"); }