【发布时间】:2016-07-30 20:15:46
【问题描述】:
我们正在为我们的下一个项目添加 Dropwizard,我们需要实施的一件事是基于角色的访问控制机制。
是否有使用 Dropwizard 的标准简单方法或我可以遵循的示例?
【问题讨论】:
标签: java oauth dropwizard authentication rbac
我们正在为我们的下一个项目添加 Dropwizard,我们需要实施的一件事是基于角色的访问控制机制。
是否有使用 Dropwizard 的标准简单方法或我可以遵循的示例?
【问题讨论】:
标签: java oauth dropwizard authentication rbac
你看过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();
}
}
您可以像这样在环境中注册 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();
}
}
【讨论】:
您可以很好地使用 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);
}
【讨论】: