Pregunta

Estamos clavar Dropwizard para nuestro próximo proyecto y una de las cosas que vamos a implementar es un rol basado en mecanismo de control de acceso.

Hay un estándar manera fácil de hacerlo es usando Dropwizard o ejemplos puedo seguir?

¿Fue útil?

Solución

Has echado un vistazo a dropwizard-auth?Esto hace que sea muy fácil de conectar en cualquier método de autenticación que desee (Shiro, Primavera, etc).También es compatible OAuth2 si quieres ir tan lejos...

Se puede implementar un Shiro autenticador como este:

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();
  }

}

Y usted puede registrarse Shiro con el medio ambiente como este (llamado desde su run método):

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"));
}

Y, a continuación, comprobar para un papel como este:

@GET
public SecretPlan getSecretPlan(@Auth Subject subject) {
  if (user.hasRole("secretPlanner")) {
    return new SecretPlan();
  } else {
    return new NonSecretPlan();
  }
}

Otros consejos

Puede usar Mecanismos de autenticación Dropwizard proporcionados http://www.dropwizard.io/0.9.1/docs/manual/auth.html

@RolesAllowed("ADMIN")
@GET
public SecretPlan getSecretPlan(@Auth User user) {
   return dao.findPlanForUser(user);
}

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top