Как решить сценарий циклической зависимости при выполнении http-вызовов, требующих аутентификации? - PullRequest
0 голосов
/ 14 февраля 2019

Я работаю над проектом, который требует от меня выполнения стандартных HTTP-вызовов с токенами сеанса.Я создаю пользовательский HTTP-клиент с пользовательским аутентификатором, что-то вроде этого:

Client client = Client.Builder().withConfig().withAuthenticator(Authenticator);

, а мой аутентификатор - это интерфейс

public interface Authenticator{
  SessionToken getSessionToken(); // so that different authentication methods can be supported
}

Теперь для выполнения запроса мне нужнополучить токен сеанса, который я получаю, вызывая authenticator.getSessionToken().Однако аутентификатор должен вызвать серверную часть, чтобы получить токен, для которого требуется клиент, что приводит к циклической зависимости.Как мне это решить?Один из подходов заключается в создании отдельного клиента аутентификации, который я передаю в конструкторе реализации Authenticator, но при импорте пакета все равно будет отображаться циклическая зависимость.Есть ли лучший способ создать это?

1 Ответ

0 голосов
/ 14 февраля 2019

В конечном счете, Client действительно не нуждается в Authenticator;ему нужно SessionToken.Один из способов добиться этого - заменить метод withAuthenticator() на withSessionToken().Очевидная реализация этого метода заключается в прямом принятии SessionToken;но вы также можете учитывать, что Authenticator является функциональным интерфейсом и поэтому может быть представлен как Supplier<SessionToken>.

В любом случае, если вы замените Client зависимость от Authenticator с SessionToken или Supplier<SessionToken>, вы можете нарушить круговую зависимость.

...