Java 使用Dropwizard的基于角色的访问控制

Java 使用Dropwizard的基于角色的访问控制,java,oauth,dropwizard,authentication,rbac,Java,Oauth,Dropwizard,Authentication,Rbac,我们正在为我们的下一个项目添加Dropwizard,我们需要实现的事情之一是基于角色的访问控制机制 使用Dropwizard或我可以遵循的示例,有没有一种标准的简单方法来实现这一点?您看过了吗?它使插入任何您想要的身份验证方法(Shiro、Spring等)变得非常容易。它还支持OAuth2,如果你想走那么远 您可以实现如下所示的Shiro验证器: 公共类基本身份验证程序实现身份验证程序{ @凌驾 公共可选身份验证(BasicCredentials凭据)引发AuthenticationExcept

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

使用Dropwizard或我可以遵循的示例,有没有一种标准的简单方法来实现这一点?

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

您可以实现如下所示的Shiro验证器:

公共类基本身份验证程序实现身份验证程序{
@凌驾
公共可选身份验证(BasicCredentials凭据)引发AuthenticationException{
Subject Subject=SecurityUtils.getSubject();
试一试{
subject.login(新用户名密码令牌(credentials.getUsername(),credentials.getPassword(),false));
返回可选。of(主题);
}捕获(未知计数异常|不正确的凭证异常|锁定的帐户异常e){
}捕获(AuthenticationException ae){
}
返回可选的。缺席();
}
}
您可以在这样的环境中注册Shiro(从
run
方法调用):

无效配置身份验证(环境){
JdbcRealm realm=getJdbcRealm();//但是配置了Shiro领域
DefaultSecurityManager securityManager=新的DefaultSecurityManager(领域);
SecurityUtils.setSecurityManager(securityManager);
environment.jersey().register(新BasicAuthProvider(新BasicAuthenticator(),“Shiro”);
}
然后检查以下角色:

@GET
public SecretPlan getSecretPlan(@Auth Subject Subject){
if(user.hasRole(“secretPlanner”)){
返回新的SecretPlan();
}否则{
返回新的非秘密计划();
}
}

您可以很好地使用dropwizard提供的身份验证机制


康迪特,谢谢你的回答!所以,假设我想和Shiro一起使用dropwizard auth。。。我怎么做水管?
@RolesAllowed("ADMIN")
@GET
public SecretPlan getSecretPlan(@Auth User user) {
   return dao.findPlanForUser(user);
}