Каков наилучший подход для реализации аутентификации на основе токенов - PullRequest
0 голосов
/ 07 октября 2019

У меня есть приложение Spring Boot, которое действует как клиент сервера. Он запрашивает данные с сервера после аутентификации. Сервер использует аутентификацию на основе токенов и меняет токен каждые 15 минут. Какой самый эффективный и чистый способ для моего клиентского приложения получить новый токен? По умолчанию я использую многопоточность и в фоновом режиме моего основного приложения я запрашиваю новый токен каждые 15 минут, но это неэффективно. Так есть ли другие подходы, такие как реактивное программирование или т. Д., Чтобы сделать это? обратите внимание, что мое приложение должно отправлять большое количество запросов на сервер за раз, поэтому я не могу проверять время получения токена при каждой отправке запроса.

1 Ответ

1 голос
/ 08 октября 2019

Я бы использовал @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 обновленный токен аутентификации.

...