JwtTokenStore的jwt存在哪里
来源:6-4 权限控制改造
朱小悬
2019-11-23
老师,您好!
JdbcTokenStore的token 是存放在数据库的。
1、JwtTokenStore的jwt是存放在哪里的呢?学生想把jwt存到redis里,又要怎么做?
2、使用JwtTokenStore的话,每次调用/token/oauth/token都会拿到一个新的jwt,并且上一个jwt还不会过期。这种情况要怎么实现成JdbcTokenStore一样,第二次获取jwt的话,上一次的jwt不过期就会返回上一个jwt。
2回答
-
月光下的初恋
2019-11-26
回复 朱小悬:我是将jwt存在redis里的,登出的时候从redis删除就行了。
这是代码:
@Configuration
public class TokenStoreConfig {
@Configuration
@ConditionalOnProperty(prefix = "auth.token.store", name = "type", havingValue = "jdbc")
@Import(AuthJdbcTokenStore.class)
public static class JdbcTokenConfig {
}
@Configuration
@ConditionalOnProperty(prefix = "auth.token.store", name = "type", havingValue = "redis")
@Import(AuthRedisTokenStore.class)
public static class RedisTokenConfig {
}
@Configuration
@ConditionalOnProperty(prefix = "auth.token.store", name = "type", havingValue = "jwt")
@Import(AuthJwtTokenStore.class)
public static class AuthJwtTokenConfig {
}
@Configuration
@ConditionalOnProperty(prefix = "auth.token.store", name = "type", havingValue = "redisJwt", matchIfMissing = true)
@Import(RedisJwtTokenStore.class)
public static class ResJwtTokenConfig {
}
@Bean
public TokenEnhancerChain tokenEnhancerChain() {
return new TokenEnhancerChain();
}
}
RedisJwtTokenStore配置如下:
public class RedisJwtTokenStore {
@Resource
private TokenEnhancerChain tokenEnhancerChain;
@Resource
private RedisConnectionFactory redisConnectionFactory;
@Bean
public TokenStore redisTokenStore() {
return new RedisTokenStore(redisConnectionFactory);
}
@Bean
public JwtAccessTokenConverter jwtAccessTokenConverter() {
final JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
converter.setSigningKey("test");
return converter;
}
@PostConstruct
public void init(){
List<TokenEnhancer> enhancers = new ArrayList<>(2);
enhancers.add(jwtTokenEnhancer());
enhancers.add(jwtAccessTokenConverter());
tokenEnhancerChain.setTokenEnhancers(enhancers);
}
/**
* jwt 生成token 定制化处理
* 添加一些额外的用户信息到token里面
*
* @return TokenEnhancer
*/
@Bean
@ConditionalOnMissingBean(DefaultJwtTokenEnhancer.class)
public TokenEnhancer jwtTokenEnhancer() {
return new DefaultJwtTokenEnhancer();
}
}
00 -
JoJo
2019-11-25
JwtTokenStore不存jwt,因为jwt是自包含的。不建议你存jwt,如果你一定要存token,就别用jwt。
因为JwtTokenStore不存jwt,所以没法返回上一个没过期的jwt,同理,如果你想要这个效果,就别用jwt。
最后,如果你一定要,就得自己写一个JwtTokenStore。
012019-11-25
相似问题