Как передать данные из аутентификатора Dropwizard обратно в приложение - PullRequest
1 голос
/ 19 июня 2020

У меня есть приложение dropwizard с базовым c пользовательским аутентификатором:

import java.util.Optional;

import io.dropwizard.auth.AuthenticationException;
import io.dropwizard.auth.Authenticator;
import io.dropwizard.auth.basic.BasicCredentials;

public class DropwizardTestAuthenticator implements Authenticator<BasicCredentials, User> {

    @Override
    public Optional<User> authenticate(BasicCredentials credentials) throws AuthenticationException {

        if(customLib.authenticate(credentials.getUsername(), credentials.password())) { 
            // customLib.getAssociatedGroups(credentials.getUsername(), credentials.password());
            // cache groups for later use
            return Optional.of(new User(credentials.getUsername(), new HashSet<String>()));
        }

        return Optional.empty();
    }
}

Пользовательская библиотека аутентифицируется с помощью AD. Я хотел бы использовать другую функцию из настраиваемой библиотеки для запроса AD для всех групп, чтобы пользователь был участником. Пароль a, так что это единственное место, где я могу вызвать функцию getAssociatedGroups (). Обычный авторизатор dropwizard не будет работать, потому что пароль недоступен. Я не могу изменить библиотеку, поэтому буду жить с ограничением, но я не могу понять, как передать данные группы пользователей обратно в основное приложение. Я вижу, что внедрение зависимостей ограничено Guice (только новыми объектами), поэтому это не сработает. Авторизатор создается пользовательским расширением DW DefaultServerFactory, поэтому я попытался передать свойства, используя JerseyEnvironment, к которому у него есть доступ, но я получил ошибку «вы не можете установить свойства в этом контексте».

Что я хочу:

  • После аутентификации пользователя также запрашивать библиотеку для связанных групп
  • Кэшировать список групп, чтобы он был доступен для основного бизнеса logi c

Есть идеи?

DW: 1.3.8 Java: 11

...