java - 使用 Dropwizard 进行基于角色的访问控制

标签 java oauth dropwizard authentication rbac

我们正在为我们的下一个项目添加 Dropwizard,我们需要实现的其中一件事是基于角色的访问控制机制。

是否有使用 Dropwizard 或我可以遵循的示例的标准简单方法?

最佳答案

你看过dropwizard-auth了吗? ?它使得插入任何你想要的身份验证方法(Shiro、Spring 等)变得非常容易。如果您想走那么远,它还支持 OAuth2...

您可以像这样实现 Shiro 身份 validator :

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

}

您可以像这样在环境中注册 Shiro(从您的 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();
  }
}

关于java - 使用 Dropwizard 进行基于角色的访问控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24020267/

相关文章:

java - Dropwizard 自定义验证注释不起作用

java - Android Actionbar 具有后退导航和下拉列表

java - 从java启动一个exe

php - 如何生成 OAuth 签名

rest - REST认证方案的安全性

error-handling - 来自 Jersey 的Dropwizard错误消息

java - 链表返回值

java - Spring Batch - 动态作业选择

python - 无法使用 Pinterest API Oauth 进行授权

java - 如何在 Dropwizard 中查看自定义 404 页面