From fe17e3fcc0988ae52c8a50d0007017c595f3769a Mon Sep 17 00:00:00 2001 From: Janne Valkealahti Date: Sun, 27 Dec 2015 11:16:36 +0000 Subject: [PATCH] Use correct RedisSerializer - Remove hardcoded JdkSerializationRedisSerializer from onMessage in favour of same defaultRedisSerializer user configured as this is most likely the one which works. - Fixes #309 --- .../redis/RedisOperationsSessionRepository.java | 17 +++++++++++++++-- .../web/http/RedisHttpSessionConfiguration.java | 3 +++ 2 files changed, 18 insertions(+), 2 deletions(-) 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 f81b8d89..7f31f379 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 @@ -302,6 +302,8 @@ public class RedisOperationsSessionRepository implements FindByIndexNameSessionR */ private Integer defaultMaxInactiveInterval; + private RedisSerializer defaultSerializer = new JdkSerializationRedisSerializer(); + /** * Allows creating an instance and uses a default {@link RedisOperations} for both managing the session and the expirations. * @@ -347,6 +349,17 @@ public class RedisOperationsSessionRepository implements FindByIndexNameSessionR this.defaultMaxInactiveInterval = defaultMaxInactiveInterval; } + /** + * Sets the default redis serializer. Replaces default serializer which is based on + * {@link JdkSerializationRedisSerializer}. + * + * @param defaultSerializer the new default redis serializer + */ + public void setDefaultSerializer(RedisSerializer defaultSerializer) { + Assert.notNull(defaultSerializer, "defaultSerializer cannot be null"); + this.defaultSerializer = defaultSerializer; + } + public void save(RedisSession session) { session.saveDelta(); if(session.isNew()) { @@ -456,8 +469,8 @@ public class RedisOperationsSessionRepository implements FindByIndexNameSessionR if(channel.startsWith(getSessionCreatedChannelPrefix())) { - RedisSerializer serializer = new JdkSerializationRedisSerializer(); - Map loaded = (Map) serializer.deserialize(message.getBody()); + // TODO: is this thread safe? + Map loaded = (Map) defaultSerializer.deserialize(message.getBody()); handleCreated(loaded, channel); return; } diff --git a/spring-session/src/main/java/org/springframework/session/data/redis/config/annotation/web/http/RedisHttpSessionConfiguration.java b/spring-session/src/main/java/org/springframework/session/data/redis/config/annotation/web/http/RedisHttpSessionConfiguration.java index 416a6115..3cef0221 100644 --- a/spring-session/src/main/java/org/springframework/session/data/redis/config/annotation/web/http/RedisHttpSessionConfiguration.java +++ b/spring-session/src/main/java/org/springframework/session/data/redis/config/annotation/web/http/RedisHttpSessionConfiguration.java @@ -94,6 +94,9 @@ public class RedisHttpSessionConfiguration extends SpringHttpSessionConfiguratio RedisOperationsSessionRepository sessionRepository = new RedisOperationsSessionRepository(sessionRedisTemplate); sessionRepository.setApplicationEventPublisher(applicationEventPublisher); sessionRepository.setDefaultMaxInactiveInterval(maxInactiveIntervalInSeconds); + if(defaultRedisSerializer != null) { + sessionRepository.setDefaultSerializer(defaultRedisSerializer); + } String redisNamespace = getRedisNamespace(); if(StringUtils.hasText(redisNamespace)) {