У меня есть приложение 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