繁体   English   中英

在RestTemplate拦截器中调用execution.execute()两次

[英]Calling execution.execute() twice in RestTemplate interceptor

我必须与需要访问令牌的外部服务集成,以便与每个请求一起发送。 访问令牌的到期时间很短(只有几个小时)。 我决定以乐观的方式使用访问令牌。 我将使用当前令牌调用外部服务。 我获得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()两次? 我没有找到任何被禁止的信息,但另一方面我还没有看到这样的代码。

我们做的完全一样 - 并且有问题。 您在那里的这段代码将泄漏连接,因为原始响应被忽略而未正确关闭。 我目前的解决方案是明确关闭它,然后执行第二次执行。 似乎到目前为止工作,但我想它需要更多的评估。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM