Я пытаюсь реализовать систему аутентификации в своем приложении Dropwizard, но не могу использовать класс User, который во всех примерах, которые я могу найти, кажется само собой разумеющимся.
Я использую информацию с собственного сайта Dropwizard, которая соответствует различным другим учебникам и примерам, которые я нашел в Интернете, о том, как он реализует аутентификатор.
https://www.dropwizard.io/1.0.0/docs/manual/auth.html
Это пример Authenticator, который я по существу скопировал:
public class ExampleAuthenticator implements Authenticator<BasicCredentials, User> {
@Override
public Optional<User> authenticate(BasicCredentials credentials) throws AuthenticationException {
if ("secret".equals(credentials.getPassword())) {
return Optional.of(new User(credentials.getUsername()));
}
return Optional.absent();
}
}
Однако, когда я пытаюсь это сделать, единственный способ, которым моя IDE может разрешить зависимость «Пользователь», - это пользователь из библиотеки «org.jetty.eclipse.Authentication», которая не компилируется, поскольку она не расширяет необходимый класс Principal. через интерфейс Authenticator.
Это соответствующая часть моего pom:
<properties>
<dropwizard.version>1.3.5</dropwizard.version>
</properties>
<dependencies>
<dependency>
<groupId>io.dropwizard</groupId>
<artifactId>dropwizard-core</artifactId>
<version>${dropwizard.version}</version>
</dependency>
<dependency>
<groupId>io.dropwizard</groupId>
<artifactId>dropwizard-jdbi</artifactId>
<version>${dropwizard.version}</version>
</dependency>
<dependency>
<groupId>io.dropwizard</groupId>
<artifactId>dropwizard-auth</artifactId>
<version>${dropwizard.version}</version>
</dependency>
</dependencies>
Код либо отказывается компилироваться, потому что Jetty-версия «User» не соответствует интерфейсу, либо потому, что не может найти другую версию «User». Есть ли зависимость, которую мне не хватает? Должен ли я реализовывать свой собственный класс User, а об этом просто не упоминалось ни в одном из примеров?
Вы должны предоставить свою собственную реализацию класса интерфейса Principle
. Обратите внимание на следующее предложение из документации и второй параметр шаблона:
Authenticators implement the Authenticator<C, P extends Principal> interface, which has a single method:
Есть проект dropwizard-example
, где это продемонстрировано: