Вызов execute.execute() дважды в перехватчике RestTemplate

Я должен интегрироваться с внешним сервисом, который требует, чтобы токен доступа отправлялся с каждым запросом. Маркер доступа имеет короткий срок действия (всего несколько часов). Я решил использовать токен доступа с оптимизмом. Я собираюсь вызвать внешнюю службу с текущим токеном. В случае получения 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;
}

Я проверил это, и он работает, но разрешено ли вызывать execute.execute() дважды? Я не нашел никакой информации о том, что это запрещено, но с другой стороны, я также не видел такой код.

1 ответ

Мы делаем то же самое - и имеем проблемы. Этот фрагмент кода, который у вас есть, будет пропускать соединения, так как исходный ответ игнорируется и не закрывается должным образом. Мое текущее решение - явно закрыть его, а затем выполнить второе выполнение. Кажется, до сих пор работает, но я думаю, что это требует большей оценки.

Другие вопросы по тегам