Springboot Redis 如何缓存 OAuth2Authorization ?

版本

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-oauth2-authorization-server</artifactId>
            <version>3.1.0</version>
        </dependency>

RedisTemplate配置

    @Bean(name = "redisTemplate")
    @ConditionalOnClass(RedisOperations.class)
    public RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory factory) {
        RedisKeyStringSerializer keyStringSerializer = new RedisKeyStringSerializer(keyPrefix);
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(factory);
        // Key 采用String 的序列化方式
        template.setKeySerializer(keyStringSerializer);
        // hash 的 key 也采用 String 的序列化方式
        template.setHashKeySerializer(keyStringSerializer);
        // value 序列化方式采用 jackson
        template.setValueSerializer(RedisSerializer.json());
        // hash的value序列化方式采用jackson
        template.setHashValueSerializer(RedisSerializer.json());
        template.afterPropertiesSet();
        return template;
    }

OAuth2Authorization把这个对象缓存进了redis, 序列化不出来,它里面的AuthorizationGrantType没提供无参构造.

如果将Redis配置成RedisSerializer.java()就会导致不好查看,不知道还没有其他的解决办法。

阅读 3.2k
1 个回答
public abstract class AuthorizationGrantTypeMixin {
    @JsonCreator
    public AuthorizationGrantTypeMixin(@JsonProperty("value") String value) { }
}

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.addMixIn(AuthorizationGrantType.class, AuthorizationGrantTypeMixin.class);

RedisSerializer<Object> serializer = new GenericJackson2JsonRedisSerializer(objectMapper);
template.setDefaultSerializer(serializer);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题