首页 > 解决方案 > Spring Session 不使用自定义 RedisTemplate bean

问题描述

尝试将 RedisTemplate bean 与 GenericJackson2JsonRedisSerializer 一起使用,但在调试时我注意到 Spring Session 使用了不同的 RedisTemplate 实例。

@Configuration
@EnableRedisHttpSession
public class RedisHttpSessionConfig extends 
    AbstractHttpSessionApplicationInitializer {

    @Bean
    public JedisConnectionFactory jedisConnectionFactory() {
        return new JedisConnectionFactory();
    }

    @Bean
    public RedisTemplate<Object, Object> redisTemplate() {
        final RedisTemplate<Object, Object> template = new RedisTemplate<>();
        template.setKeySerializer(new StringRedisSerializer());
        template.setHashKeySerializer(new StringRedisSerializer());

        template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
        template.setConnectionFactory(jedisConnectionFactory());
        return template;
    }

    @Bean
    public HttpSessionEventPublisher httpSessionEventPublisher() {
        return new HttpSessionEventPublisher();
    }

运行此程序时,Spring Session 似乎对 hashValues 使用默认的 JdkSerializationRedisSerializer,而不是所需的 GenericJackson2JsonRedisSerializer。

删除extends AbstractHttpSessionApplicationInitializer似乎使 Spring 使用正确的 RedisTempplate bean,但是 Spring Session 根本没有连接。

使用 Spring Session 1.3.3 和 spring-boot-starter-data -redis 1.5.13。

知道我错过了什么吗?

标签: springspring-bootspring-securityredisspring-session

解决方案


你只需要像这样覆盖春季会话的默认 RedisSerializer

@Configuration public class RedisConfig {

@Bean(name="springSessionDefaultRedisSerializer")
public RedisSerializer serializer() {
    return new GenericJackson2JsonRedisSerializer();
}

推荐阅读