2016-11-01 11 views
1

Я занимался некоторыми исследованиями в области безопасности и проверки подлинности с помощью Drop-Wizard. Вот ссылка, которую я использовал http://howtodoinjava.com/dropwizard/dropwizard-basic-auth-security-example/.Пользователи с полномочиями Dropwizard

Мой вопрос в том, как создавать новых пользователей, поскольку VALID_USERS является статическим финалом и не может быть изменен. Я думал о создании базы данных и состоял бы из пользовательского объекта, который содержит имя пользователя и роль ex. админ. (Мне не нужен пароль) Но я смущен тем, что я верну. В их примере они возвратили Optional.of (новый пользователь (credentials.getUsername(), VALID_USERS.get (credentials.getUsername()))); Могу ли я вернуть объект пользователя?

По сути, я хочу, чтобы аутентифицировать пользователя по имени пользователя и предоставить им роль авторизации ex. admin, basic. Но я думаю, я смущен, как создать список пользователей и их роли. Я думал о создании базы данных, но я не уверен, как именно я это реализую.

public class AppBasicAuthenticator implements Authenticator<BasicCredentials, User> 
{ 
    private static final Map<String, Set<String>> VALID_USERS = ImmutableMap.of(
     "guest", ImmutableSet.of(), 
     "user", ImmutableSet.of("USER"), 
     "admin", ImmutableSet.of("ADMIN", "USER") 
    ); 

    @Override 
    public Optional<User> authenticate(BasicCredentials credentials) throws AuthenticationException 
    { 
     if (VALID_USERS.containsKey(credentials.getUsername()) && "password".equals(credentials.getPassword())) 
     { 
      return Optional.of(new User(credentials.getUsername(), VALID_USERS.get(credentials.getUsername()))); 
     } 
     return Optional.empty(); 
    } 
} 

ответ

0

В последней версии DropWizard вы можете найти как аутентификацию, так и авторизацию. Первый, в двух словах, инструктирует DropWizard запрашивать у пользователя учетные данные, если вы используете базовую аутентификацию, когда она пытается получить доступ к ресурсу или предоставить некоторую другую проверку идентификации. Последнее позволяет предоставить пользователю доступ к различным ресурсам на основе ролей пользователя.

Существуют различные возможности хранения пользовательских данных и ролей. Примеры включают базу данных, которую вы упомянули, сервер LDAP и стороннюю систему управления идентификацией.

Если вас интересует базовая аутентификация, вы можете взглянуть на мой пример here. База данных используется для хранения учетных данных пользователя. Кроме того, здесь я немного устарел от учебника по адресу DropWizard authentication. Код последней версии находится в вышеупомянутом примере приложения.

Чтобы реализовать только аутентификацию, вы можете пропустить добавление ролей и регистрацию авторизатора. Чтобы добавить авторизацию, вы можете добавить коллекцию ролей в свой объект пользователя и использовать аннотации, такие как @RolesAllowed и @PermitAll, а также реализацию Authorizer для предоставления/запрещения доступа к вашим ресурсам.

Ссылка на документы для проверки подлинности DropWizard: here.

Пожалуйста, не стесняйтесь задавать больше вопросов в комментариях и удачи.

+0

Привет Большое спасибо! Я нашел ваш пример действительно полезным. Один из моих вопросов заключался в том, как создать два уровня пользователей, Admin и гость, которые будут иметь разные разрешения. Не могли бы вы дать мне несколько советов о том, как это сделать? – Bob

+0

Идея состоит в том, что вы можете использовать коллекцию строк в своих пользовательских объектах; строки фактически являются ролями. JPA/Hibernate позволяет это сделать (http://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html#collections-value). После этого вы должны реализовать Авторизатор, пример из проекта Dropwizard приведен ниже и зарегистрировать в методе run() класса приложения. После этого вы можете защитить свои методы с помощью @RolesAllowed аннотации, где вы предоставляете список ролей, подобный запятой, например @RolesAllowed («ADMIN»). – javaeeeee

+0

общественный класс ExampleAuthorizer реализует Authorizer { @Override общественных булевых авторизированный (пользователь User, String роль) { возврата user.getRoles() = NULL && user.getRoles() содержит (роль)!. } } Это авторинсер из примера приложения DropWizard. – javaeeeee

 Смежные вопросы

  • Нет связанных вопросов^_^