各リクエストでアクセストークンを送信する必要がある外部サービスと統合する必要があります。アクセス トークンの有効期限は短い (わずか数時間)。アクセス トークンを楽観的に使用することにしました。現在のトークンで外部サービスを呼び出します。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() を 2 回呼び出すことはできますか? 禁止されているという情報は見つかりませんでしたが、一方でそのようなコードも見たことがありません。