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