Как извлечь дополнительную информацию из Json Web Token JWT - PullRequest
0 голосов
/ 05 октября 2018

Я работаю в проекте, использующем 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 голосов
/ 05 октября 2018

Наконец-то у меня есть решение, оно работает как чемпион ... Ниже приведен фрагмент кода, надеюсь, это поможет ...

@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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...