【发布时间】:2018-01-06 19:26:57
【问题描述】:
我必须与需要随每个请求一起发送访问令牌的外部服务集成。访问令牌的过期时间很短(只有几个小时)。我决定以乐观的方式使用访问令牌。我将使用当前令牌调用外部服务。如果遇到 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() 两次?我没有找到任何禁止它的信息,但另一方面我也没有看到这样的代码。
【问题讨论】:
-
我也有同样的需求,我想使用类似于您建议的拦截器。此解决方案是否有效或您是否遇到过问题?我找不到任何关于如何提议代币协商的信息
标签: java spring interceptor resttemplate retry-logic