OAuth2RestTemplate - 客户端缓存

Pun*_*cky 3 java spring spring-boot

我看到下面的 restTemplate 用于获取 OAuth 令牌。我没有看到任何显式调用来缓存我的应用程序中的令牌。但是,我看到此模板返回了相同的令牌值。OAuth2RestTemplate 是否固有地实现了客户端缓存?如果是这样,它会在令牌过期时显式调用 OAuth2 端点吗?

@Qualifier("oauth")
@Bean
public OAuth2RestTemplate restTemplate(@Qualifier("resourceDetails") ClientCredentialsResourceDetails resourceDetails) {
    return new OAuth2RestTemplate(resourceDetails);
}
Run Code Online (Sandbox Code Playgroud)

我在文档中看到了以下内容-

getAccessToken public OAuth2AccessToken getAccessToken() 抛出 UserRedirectRequiredException

如有必要,获取或更新当前上下文的访问令牌。此方法将在执行请求时自动调用(并缓存结果),但也可以作为独立方法调用以预填充令牌。

sta*_*ker 6

很明显,令牌缓存在定义资源时创建的上下文(DefaultOAuth2ClientContext 对象)中。但是,令牌是通过调用 getAccessToken() 来管理的。以下是文档关于 getAccessToken() 的说明:

如有必要,获取或更新当前上下文的访问令牌。该方法将在执行请求时自动调用(并且结果被缓存),但也可以作为独立方法调用以 * 预填充令牌。

令牌被缓存,直到它过期,然后它会自动更新。来自 getAccessToken() 的这段代码描述了它:

if (accessToken == null || accessToken.isExpired()) {
            try {
                accessToken = acquireAccessToken(context);
            }
Run Code Online (Sandbox Code Playgroud)

关于缓存机制,默认情况下spring提供了内存缓存

DefaultOAuth2ClientContext

但您可以提供自己的实现

OAuth2ClientContext