如何从Json Web令牌JWT中提取其他信息

时间:2018-10-05 02:47:03

标签: java oauth-2.0 jwt

我正在一个项目中应用Spring Boot和JWT。 在OAuth2配置中,我成功地将更多信息添加到JWT中,但是当处理包含我的信息的请求时,我不知道如何提取该信息。

下面是我添加了其他信息的代码段:

public class CustomTokenEnhancer implements TokenEnhancer {

    @Override
    public OAuth2AccessToken enhance(OAuth2AccessToken accessToken, OAuth2Authentication authentication) {
        Map<String, Object> additionalInfo = new HashMap<>();
        additionalInfo.put("user_name", authentication.getName());
        User user = userService().getUserDetailsByLoginId(authentication.getName());
        additionalInfo.put("user_id", user.getRelationPartId());
        ((DefaultOAuth2AccessToken) accessToken).setAdditionalInformation(additionalInfo);
        return accessToken;
    }
}

如果您有经验,请在处理请求时帮助我从令牌中获取user_id。

谢谢

1 个答案:

答案 0 :(得分:0)

最后,我找到了解决方案,它的工作原理像冠军一样…… 下面是一些代码段,希望对您有所帮助...

@Bean
public TokenStore tokenStore() {
    return new JwtTokenStore(accessTokenConverter());
}

@Bean
public TokenEnhancer customTokenEnhancer() {
    return new CustomTokenEnhancer();
}

@Bean
public DefaultAccessTokenConverter customAccessTokenConverter() {
    return new DefaultAccessTokenConverter();
}

@Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {

        TokenEnhancerChain tokenEnhancerChain = new TokenEnhancerChain();
        tokenEnhancerChain.setTokenEnhancers(Arrays.asList(customTokenEnhancer(), accessTokenConverter()));

        endpoints.tokenStore(tokenStore()).tokenEnhancer(tokenEnhancerChain)
                    .accessTokenConverter(customAccessTokenConverter())
                     .authenticationManager(authenticationManager);
    }

在控制器中:

@Autowired
private TokenStore tokenStore;

@ApiOperation(value = "test get security data", response = String.class)
@RequestMapping(value = "/getUser1", method = RequestMethod.GET)
public @ResponseBody String getData1(OAuth2Authentication principal) {
    OAuth2AuthenticationDetails auth2AuthenticationDetails = (OAuth2AuthenticationDetails) principal.getDetails();
    Map<String, Object> details = tokenStore.readAccessToken(auth2AuthenticationDetails.getTokenValue()).getAdditionalInformation();
    String department= (String) details.get("department");
    return null;
}