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

时间:2019-05-27 14:57:41

标签: java spring spring-boot resttemplate

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

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

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

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

是否可以使用RestTemplate无缝处理这种情况?

我已经尝试过手动处理这种情况,因此,如果我从API取回了401,则我发送了刷新令牌请求,重写了我取回的密钥并重试了该请求,但不确定如何处理将api密钥存储在其中情况下,我需要重启服务器。

1 个答案:

答案 0 :(得分:2)

使用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;
}

请参阅here,以获取更多指导。