pma*_*her 6 java spring interceptor resttemplate retry-logic
我必须与需要随每个请求发送访问令牌的外部服务集成。访问令牌的到期时间很短(只有几个小时)。我决定以乐观的方式使用访问令牌。我将使用当前令牌致电外部服务。我得到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;
}
Run Code Online (Sandbox Code Playgroud)
我已经对其进行了测试,并且可以运行,但是允许两次调用execution.execute()吗?我还没有发现任何禁止使用的信息,但是从另一方面来看,我也没有看到这样的代码。
小智 5
我们正在做完全相同的事情 - 并且有问题。由于原始响应被忽略且未正确关闭,因此您拥有的这段代码将泄漏连接。我目前的解决方案是显式关闭它,然后进行第二次执行。到目前为止似乎工作,但我想它需要更多的评估。
| 归档时间: |
|
| 查看次数: |
731 次 |
| 最近记录: |