当前位置 博文首页 > 无限迭代中......:Spring Session Redis——自定义JSON序列化解

    无限迭代中......:Spring Session Redis——自定义JSON序列化解

    作者:[db:作者] 时间:2021-07-19 19:24

    问题描述

    Spring Session + Redis——自定义JSON序列化解决方案

    问题分析

    RedisHttpSessionConfiguration中,Bean名称必须是springSessionDefaultRedisSerializer才能指定Jackson序列化器。

        @Autowired(required = false)
    	@Qualifier("springSessionDefaultRedisSerializer")
    	public void setDefaultRedisSerializer(
    			RedisSerializer<Object> defaultRedisSerializer) {
    		this.defaultRedisSerializer = defaultRedisSerializer;
    	}

    解决方案

    使用指定Bean的名称springSessionDefaultRedisSerializer。?由于必须在Jackson的ObjectMapper中序列化会话信息,因此可以使用SecurityJackson2Modules注册所需的模块。

        @Bean
        public ObjectMapper objectMapper(){
            ObjectMapper objectMapper = new ObjectMapper();
            objectMapper.registerModules(SecurityJackson2Modules.getModules(getClass().getClassLoader()));
            return objectMapper;
        }
        @Autowired
        private ObjectMapper objectMapper;
    
        @Bean
        public RedisSerializer<Object> redisSerializer(){
            return new GenericJackson2JsonRedisSerializer(objectMapper);
        }
    
        @Bean
        public RedisSerializer<Object> springSessionDefaultRedisSerializer(){
                return redisSerializer;
        }

    ?以上代码可以化简:

        @Bean
        public RedisSerializer<Object> springSessionDefaultRedisSerializer(){
            ObjectMapper objectMapper = new ObjectMapper();
            objectMapper.registerModules(SecurityJackson2Modules.getModules(getClass().getClassLoader()));
            return new GenericJackson2JsonRedisSerializer(objectMapper);
        }        

    也可以用@Qualifier("springSessionDefaultRedisSerializer")

    ?

    参考文章

    Spring Session & RedisでJacksonを使ったシリアライズを試してみる

    cs