如何在 Spring Boot Rest 模板客户端中处理过期的刷新令牌

mgo*_*gol 3 java spring resttemplate spring-boot

我正在努力在我的 Spring Boot 应用程序中集成第三方 API。

第三方 API 身份验证的工作原理:

  1. 初始授权后,我将获得刷新令牌和访问令牌,该令牌在给定时间后到期
  2. 访问令牌过期后,我使用刷新令牌获取新的访问令牌和新的刷新令牌

使用当前的访问令牌,我可以调用 API。

有没有办法使用 RestTemplate 无缝处理这种情况?

我已经尝试手动处理这种情况,所以如果我从 API 返回 401,我发送了一个刷新令牌请求,重写我返回的密钥并重试请求,不确定如何处理存储 api 密钥以备不时之需重新启动服务器。

roo*_*eee 7

这很容易用 a 完成,ClientHttpRequestInterceptor如果401发生了,您可以在其中替换请求标头:

@Override
public ClientHttpResponse intercept(
  HttpRequest request, 
  byte[] body, 
  ClientHttpRequestExecution execution) throws IOException {

    ClientHttpResponse response = execution.execute(request, body);
    if(response.getStatusCode() == HttpStatus.UNAUTHORIZED) {
       request.getHeaders().replace("Auth-Header", getNewToken());
       return execution.execute(request, body);
    }
    return response;
}
Run Code Online (Sandbox Code Playgroud)

请参阅此处以获取进一步指导。