Кэширует токен доступа с помощью Spring Oauth2
Я реализовал веб-сервисы REST в рамках Java Spring. Мое приложение должно получить токен доступа для того, чтобы сделать другие запросы URL. Я хотел бы кэшировать токен, чтобы я мог использовать его до истечения срока его действия. На данный момент я использую поле для хранения токена, но есть ли другой способ использования класса безопасности Spring?
Вот как я приобретаю accesToken:
@Bean
private OAuth2ProtectedResourceDetails oAuth2ProtectedResourceDetails() {
ClientCredentialsResourceDetails details = new
ClientCredentialsResourceDetails();
details.setClientId(clientId);
details.setClientSecret(clientSecret);
accessTokenUrl = BackEndUrl + "/oauth2/token";
details.setAccessTokenUri(accessTokenUrl);
return details;
}
@Bean
private OAuth2RestTemplate createRestTemplate(OAuth2ClientContext clientContext) {
return new OAuth2RestTemplate(oAuth2ProtectedResourceDetails(), clientContext);
}
@Override
public ResponseEntity<String> service() {
// Token recovery if no token has been created or if the token expiration time is exceeded
if (this.strToken == null || this.tokenLimitTime.isBeforeNow()) {
OAuth2ClientContext context = new DefaultOAuth2ClientContext();
OAuth2RestTemplate restTemplate = createRestTemplate(context);
OAuth2AccessToken token = restTemplate.getAccessToken();
if (token != null) {
this.strToken = token.getValue();
this.tokenLimitTime = DateTime.now().plusSeconds(token.getExpiresIn());
}
}
1 ответ
Это зависит от того, какой магазин токенов вы используете. Например, если вы используете InMemoryTokenStore
или же JDBCTOkenStore
есть API, предоставленный для доступа к токену с использованием имени пользователя или идентификатора клиента (т.е. public Collection<OAuth2AccessToken> findTokensByClientIdAndUserName(String clientId, String userName)
или же public Collection<OAuth2AccessToken> findTokensByClientId(String clientId)
).
Если вы используете JwtTokenStore, есть ApprovalStore
механизм.