今天用redis存token发现始终验证不通过,于是打开redis客户端看了看,果然发现了问题。
出现了前边出现一堆不知道是什么的东西。
我springboot中的RedisTemple就是直接@Autowird的,所以默认使用JdkSerializationRedisSerializer(jdk自己的序列化)。
解决办法:
修改序列化器,使用阿里的FastJson2JsonRedisSerializer。
并在创建bean的时候指定。在启动类添加代码即可。
@Bean
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
// 使用Jackson2JsonRedisSerialize 替换默认序列化
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
// 设置value的序列化规则和 key的序列化规则
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
参考文章:https://blog.csdn.net/qq_38366063/article/details/89067494
https://www.cnblogs.com/wenbronk/p/6992615.html