DropWizardを使用したロールベースのアクセス制御
-
21-12-2019 - |
質問
私たちは私たちの次のプロジェクトのためにドロップウィザードをスパイクしています、そして実装する必要があることの1つは役割ベースのアクセス制御メカニズムです。
ドロップウィザードや例を使用してそれを行う標準的な簡単な方法はありますか?
解決
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);
}
. 所属していません StackOverflow