Я бы использовал @Retryable
с RetryOperationsInterceptor
или ExceptionClassifierRetryPolicy
.
Вот как это происходит:
У нас есть @Component
синглтон для хранения токена аутентификации:
@Component
public class AuthenticationHolder {
private String token;
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
}
Сделать @Component
, который фактически запрашивает данные с сервера, не осведомленным о процессе аутентификации. У него есть только ссылка на ваш AuthenticationHolder
синглтон, и в методе он пытается запросить данные (очевидно, помеченные @Retryable
, он извлекает токен и делает запрос. В случае сбоя с неверным кодом ответа с сервера,Сделайте исключение, и он будет повторяться. В промежутках между попытками сделайте ваш RetryOperationsInterceptor
обновленный токен аутентификации.