【发布时间】:2020-06-08 04:32:45
【问题描述】:
我正在尝试使用以下代码在 Spring Boot 中创建一个 oAuth 客户端。我尝试记录 getoken 方法。根据文档和代码,它还必须缓存令牌,我检查了其中的源代码,检查令牌是否为空或令牌是否过期,它正在尝试调用。但对我来说,每个电话都是用一个新的令牌来响应的。能否请您告诉我为什么不缓存它,它与上下文有什么关系吗?
@Bean
@ConfigurationProperties("app.oauth2.client")
protected ClientCredentialsResourceDetails oAuthDetails() {
return new ClientCredentialsResourceDetails();
}
@Bean
protected OAuth2RestTemplate restTemplate() {
return new OAuth2RestTemplate(oAuthDetails());
}
来自 Spring 源代码
/**
* Acquire or renew an access token for the current context if necessary. This method will be called automatically
* when a request is executed (and the result is cached), but can also be called as a standalone method to
* pre-populate the token.
*
* @return an access token
*/
public OAuth2AccessToken getAccessToken() throws UserRedirectRequiredException {
OAuth2AccessToken accessToken = context.getAccessToken();
if (accessToken == null || accessToken.isExpired()) {
try {
accessToken = acquireAccessToken(context);
}
catch (UserRedirectRequiredException e) {
context.setAccessToken(null); // No point hanging onto it now
accessToken = null;
String stateKey = e.getStateKey();
if (stateKey != null) {
Object stateToPreserve = e.getStateToPreserve();
if (stateToPreserve == null) {
stateToPreserve = "NONE";
}
context.setPreservedState(stateKey, stateToPreserve);
}
throw e;
}
}
return accessToken;
}
【问题讨论】:
标签: spring spring-boot spring-security