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
This commit is contained in:
Janne Valkealahti
2015-12-27 11:16:36 +00:00
committed by Rob Winch
parent ef904a4544
commit fe17e3fcc0
2 changed files with 18 additions and 2 deletions

View File

@@ -302,6 +302,8 @@ public class RedisOperationsSessionRepository implements FindByIndexNameSessionR
*/
private Integer defaultMaxInactiveInterval;
private RedisSerializer<Object> 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<Object> 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<Object> serializer = new JdkSerializationRedisSerializer();
Map<Object,Object> loaded = (Map<Object, Object>) serializer.deserialize(message.getBody());
// TODO: is this thread safe?
Map<Object,Object> loaded = (Map<Object, Object>) defaultSerializer.deserialize(message.getBody());
handleCreated(loaded, channel);
return;
}

View File

@@ -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)) {