我看到下面的restTemplate用于获取OAuth令牌。我没有看到任何显式调用将令牌存储在应用程序中。但是,我看到此模板返回相同的令牌值。 OAuth2RestTemplate是否固有地实现客户端缓存?如果是这样,令牌到期后是否会显式调用OAuth2端点?
@Qualifier("oauth")
@Bean
public OAuth2RestTemplate restTemplate(@Qualifier("resourceDetails") ClientCredentialsResourceDetails resourceDetails) {
return new OAuth2RestTemplate(resourceDetails);
}
我在文档中看到了以下内容-
getAccessToken公共OAuth2AccessToken getAccessToken() 引发UserRedirectRequiredException
如有必要,获取或更新当前上下文的访问令牌。 执行请求时将自动调用此方法 (结果被缓存),但也可以称为独立实例 预先填充令牌的方法。
答案 0 :(得分:3)
很明显,令牌是在定义资源时创建的上下文(DefaultOAuth2ClientContext对象)中缓存的。但是,通过调用getAccessToken()来管理令牌。这是医生对getAccessToken()的评价:
如有必要,获取或更新当前上下文的访问令牌。 当有请求时,此方法将自动* 执行(结果被缓存),但也可以称为 *预先填充令牌的独立方法。
令牌将一直缓存到过期为止,然后它将自动更新。 getAccessToken()中的以下代码段对此进行了描述:
if (accessToken == null || accessToken.isExpired()) {
try {
accessToken = acquireAccessToken(context);
}
关于缓存机制,默认情况下,spring提供内存中缓存
DefaultOAuth2ClientContext
但是您可以提供自己的
实现。OAuth2ClientContext