Spring OAuth2自定义TokenEnhancer 不生效

新手上路,请多包涵

自定义的TokenEnhancer如下:

public class CustomTokenEnhancer implements TokenEnhancer {
    @Override
    public OAuth2AccessToken enhance(OAuth2AccessToken oAuth2AccessToken, OAuth2Authentication oAuth2Authentication) {
        if (oAuth2AccessToken instanceof DefaultOAuth2AccessToken) {
            DefaultOAuth2AccessToken token = (DefaultOAuth2AccessToken)oAuth2AccessToken;
            Map<String, Object> additionalInformation = new HashMap<>();
            additionalInformation.put("client_id", oAuth2Authentication.getOAuth2Request().getClientId());;
            // 获取用户名
            SystemUserDetail user = (SystemUserDetail)oAuth2Authentication.getPrincipal();
            additionalInformation.put("user_name", user.getUsername());
            additionalInformation.put("user_id", user.getId());
            token.setAdditionalInformation(additionalInformation);
            return token;
        }
        return oAuth2AccessToken;
    }
}

在AuthorizationServerConfigurerAdapter配置中如下

@Bean
    public TokenEnhancer customTokenEnhancer(){
        return new CustomTokenEnhancer();
    }
@Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) {
        endpoints.authenticationManager(authenticationManager)
                .userDetailsService(systemUserService)
                .tokenStore(tokenStore)
                .tokenEnhancer(customTokenEnhancer());
    }

但是返回的格式还是没有变还是这样
image.png

阅读 4.7k
2 个回答
    @Bean
    public TokenEnhancer customTokenEnhancer(){
        return new CustomTokenEnhancer();
    }
    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) {
        TokenEnhancerChain tokenEnhancerChain = new TokenEnhancerChain();
        tokenEnhancerChain.setTokenEnhancers(Arrays.asList(customTokenEnhancer()));
    
        endpoints.authenticationManager(authenticationManager)
                .userDetailsService(systemUserService)
                .tokenStore(tokenStore)
                .tokenEnhancer(tokenEnhancerChain);
    }

吧TokenEnhancer添加到TokenEnhancerChain中,再把TokenEnhancerChain设置到endpoints

新手上路,请多包涵

你是不是使用数据库或者redis保存token的?
如果是的话,建议重新换个clientId和clientSecret 去生成token,在没有自定义tokenhance 之前,你可能已经生成过token了,这时候spring security 就不会重新走生成token的逻辑,而是直接去redis或者数据库中拿token了,这时候的token是旧的token,肯定是没有你增加的额外字段的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题