Управление доступом на основе ролей с помощью Dropwizard

Мы добавляем Dropwizard для нашего следующего проекта, и одна из вещей, которую нам нужно реализовать, — это механизм управления доступом на основе ролей.

Есть ли стандартный простой способ сделать это с помощью Dropwizard или примеров, которым я могу следовать?


person Marcelo Oliveira    schedule 03.06.2014    source источник


Ответы (2)


Вы ознакомились с dropwizard-auth? Это позволяет очень легко подключить любой метод аутентификации, который вы хотите (Shiro, Spring и т. д.). Он также поддерживает OAuth2, если вы хотите зайти так далеко...

Вы можете реализовать аутентификатор Shiro следующим образом:

public class BasicAuthenticator implements Authenticator<BasicCredentials, Subject> {

  @Override
  public Optional<Subject> authenticate(BasicCredentials credentials) throws AuthenticationException {
    Subject subject = SecurityUtils.getSubject();
    try {
      subject.login(new UsernamePasswordToken(credentials.getUsername(), credentials.getPassword(), false));
      return Optional.of(subject);
    } catch (UnknownAccountException | IncorrectCredentialsException | LockedAccountException e) {
    } catch (AuthenticationException ae) {
    }
    return Optional.absent();
  }

}

И вы можете зарегистрировать Широ в такой среде (вызывается из вашего метода run):

void configureAuthentication(Environment environment) {
  JdbcRealm realm = getJdbcRealm(); // However your Shiro realm is configured

  DefaultSecurityManager securityManager = new DefaultSecurityManager(realm);
  SecurityUtils.setSecurityManager(securityManager);

  environment.jersey().register(new BasicAuthProvider<Subject>(new BasicAuthenticator(), "Shiro"));
}

И затем проверьте роль следующим образом:

@GET
public SecretPlan getSecretPlan(@Auth Subject subject) {
  if (user.hasRole("secretPlanner")) {
    return new SecretPlan();
  } else {
    return new NonSecretPlan();
  }
}
person condit    schedule 03.06.2014
comment
Кондит, спасибо за ответ! Итак, скажем, я хочу использовать dropwizard-auth вместе с Широ... как мне сделать сантехнику? - person Marcelo Oliveira; 04.06.2014

Вы можете очень хорошо использовать предоставленные dropwizard механизмы аутентификации http://www.dropwizard.io/0.9.1/docs/manual/auth.html

@RolesAllowed("ADMIN")
@GET
public SecretPlan getSecretPlan(@Auth User user) {
   return dao.findPlanForUser(user);
}
person Ravi Teja Ch N V    schedule 30.07.2016