Spring Authorization Server RedisTokenStore怎么做序列化和反序列化
时间: 2023-07-18 07:24:07 浏览: 112
Spring Authorization Server RedisTokenStore 默认使用 JDK 序列化方式来序列化和反序列化 Token,但是 JDK 序列化方式有一些缺点,比如序列化后的字节数组长度大、序列化速度慢、可读性差等。为了解决这些问题,可以使用其他序列化方式,比如 JSON 序列化方式。
具体实现步骤如下:
1. 添加 Redis 相关依赖,比如 jedis、lettuce 等。
2. 在 Spring Security 配置类中创建 RedisConnectionFactory 和 RedisTemplate,代码如下:
```
@Configuration
public class RedisConfig {
@Bean
public RedisConnectionFactory redisConnectionFactory() {
return new LettuceConnectionFactory("localhost", 6379);
}
@Bean
public RedisTemplate<String, Object> redisTemplate() {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory());
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
return redisTemplate;
}
}
```
3. 修改 TokenStore 的实现类 RedisTokenStore 中的序列化代码,将 JDK 序列化方式改为 JSON 序列化方式,代码如下:
```
public class RedisTokenStore implements TokenStore {
private static final String ACCESS_TOKEN_PREFIX = "access:";
private static final String REFRESH_TOKEN_PREFIX = "refresh:";
private final RedisTemplate<String, Object> redisTemplate;
public RedisTokenStore(RedisConnectionFactory connectionFactory) {
Assert.notNull(connectionFactory, "connectionFactory cannot be null");
this.redisTemplate = new RedisTemplate<>();
this.redisTemplate.setConnectionFactory(connectionFactory);
this.redisTemplate.setKeySerializer(new StringRedisSerializer());
this.redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
this.redisTemplate.setHashKeySerializer(new StringRedisSerializer());
this.redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
this.redisTemplate.afterPropertiesSet();
}
// ...
}
```
这样就可以使用 JSON 序列化方式来序列化和反序列化 Token 了。
阅读全文