我必须与需要随每个请求一起发送访问令牌的外部服务集成。访问令牌的过期时间很短(只有几个小时)。我决定以乐观的方式使用访问令牌。我将使用当前令牌调用外部服务。如果遇到 401,我将刷新令牌并再次调用外部 API。
我决定使用 ClientHttpRequestInterceptor 来实现描述的重试机制。
public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {
ClientHttpResponse response = execution.execute(request, body);
if(response.getStatusCode() == UNAUTHORIZED) {
refreshToken();
updateToken(request);
response = execution.execute(request, body);
}
return response;
}
我已经对其进行了测试并且可以正常工作,但是是否允许调用 execution.execute() 两次?我没有找到任何禁止它的信息,但另一方面我也没有看到这样的代码。