[TOC]
redis共享session配置
在启动类上增加如下代码
@EnableRedisHttpSession
观察redis中session数据
在spring-boot中使用redis共享session时, 会发现value的默认编码方式我们不能直接观察出里面的内容
观察 RedisHttpSessionConfiguration
源码
通过查找 @EnableRedisHttpSession
源码,
我们可以看到提示: 更多高级配置可以查看 RedisHttpSessionConfiguration
观察 RedisHttpSessionConfiguration
源码
进入RedisHttpSessionConfiguration
代码, 我们可以看到
// 通过set方法来设置 defaultRedisSerializer (非常重要!!!)
@Autowired(required = false)
@Qualifier("springSessionDefaultRedisSerializer")
public void setDefaultRedisSerializer(
RedisSerializer<Object> defaultRedisSerializer) {
this.defaultRedisSerializer = defaultRedisSerializer;
}
...
// 创建RedisTemplate
private RedisTemplate<Object, Object> createRedisTemplate() {
RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
//如果defaultRedisSerializer有值, 则覆盖默认序列化方式
if (this.defaultRedisSerializer != null) {
redisTemplate.setDefaultSerializer(this.defaultRedisSerializer);
}
redisTemplate.setConnectionFactory(this.redisConnectionFactory);
redisTemplate.setBeanClassLoader(this.classLoader);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
观察 RedisTemplate
源码
可以发现, 此时会对 defaultSerializer
进行判断, 赋默认值
自定义 redis 序列化方式
通过上述代码分析, 我们能清楚的知道, 只需要我们在spring容器中注入 springSessionDefaultRedisSerializer
@Bean("springSessionDefaultRedisSerializer")
public RedisSerializer<Object> defaultRedisSerializer(){
log.debug("Custom Redis Session Serializer load succeeded");
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(Object.class);
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
return jackson2JsonRedisSerializer;
}
启动项目, 再次观察redis中的session数据
可以发现, 数据已经是明文了, 方便我们开发调试.