我已经使用令牌存储JwtTokenStore(JwtAccessTokenStore)成功获得了解码详细信息,但现在需要使用redis,以便我可以撤销令牌。
下面是我代码:
@Bean
public TokenStore tokenStore() {
return new RedisTokenStore(redisConnectionFactory);
// return new JwtTokenStore(defaultAccessTokenConverter());
}
@Bean
public JwtAccessTokenConverter defaultAccessTokenConverter() {
JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
converter.setAccessTokenConverter(new CustomJWTAccessTokenConverter());
try {
converter.afterPropertiesSet();
} catch (Exception e) {
e.printStackTrace();
}
converter.setKeyPair(this.keyPair());
return converter;
}
字符串
我的customjwtaccesstokenconverter:
public class CustomJWTAccessTokenConverter extends DefaultAccessTokenConverter {
@Override
public OAuth2Authentication extractAuthentication(Map<String, ?> claims) {
OAuth2Authentication authentication
= super.extractAuthentication(claims);
authentication.setDetails(claims);
return authentication;
}
}
型
令牌增强器:
@Override
public OAuth2AccessToken enhance(OAuth2AccessToken accessToken, OAuth2Authentication authentication) {
Map<String, Object> setAdditionalInformation = (Map<String, Object>) authentication.getUserAuthentication().getDetails();
((DefaultOAuth2AccessToken) accessToken).setAdditionalInformation(setAdditionalInformation);
return accessToken;
}
型
我不知道,当使用redistokenstore。它没有去CustomJWTAccessTokenConverter,因为当我试图获得额外的信息(decodeDetails)返回null。
OAuth2Authentication authentication = (OAuth2Authentication) SecurityContextHolder.getContext().getAuthentication();
OAuth2AuthenticationDetails authenticationDetails = (OAuth2AuthenticationDetails) authentication.getDetails();
Map<String, Object> decodeDetails = (Map<String, Object>) authenticationDetails.getDecodedDetails();
型
3条答案
按热度按时间fnx2tebb1#
您还需要配置令牌增强器-
字符串
h4cxqtbf2#
它解决了,但不确定这是正确的方式或不是。
字符串
如果有人有更好的想法,请评论。
dnph8jn43#
最简单的方法在这里。
字符串
您还可以返回值。