EJB3.1入門〜セキュリティ〜
JavaEEではユーザーの認証、認証されたユーザーがどのようなロールを認可されるかという設定は全てサーバーが管理する。
そのため、EJBのセキュリティ設定は、使用可能なロールの設定と、そのロールに対して、どのEJBやメソッドにアクセス許可を与えるかを設定するだけ。
使用可能なロールの設定はejb-jar.xmlに設定する。
主に使用するアノテーションは@PermitAll、@RolesAllowed、@DenyAll。どれもクラス・メソッドの両方に付加できる。
@RunAsアノテーションは、一時的にロールを切り替えるアノテーション。
@Stateless //このEJBにアクセスできるのはロールが"user","admin","employee"の場合のみ。 @RolesAllowed({"user","admin","employee"}) public class MogaEjb{ // 全てのロールがアクセス可能なメソッド。 // しかしBeanへのアクセスは@RolesAllowedで指定されたロールのみなので実質アクセスできるロールは"user","admin","employee"のみ。 @PermitAll public boolean methodA(){ } // 全てのロールに対してアクセスを拒否。 @DenyAll public void methodB(){ } // "admin"ロールのみが実行可能なメソッド。 @RolesAllowed("admin") public boolean methodC(){ } } @RolesAllowed({"officer","boss","ceo"}) // "officer","boss","ceo" を一時的に"admin"ロールを割り振り、アクセス許可を与える。 @RunAs("admin") public class OtherEjb{ @EJB @MogaEjb mogaEjb; public void methocXXX(){ mogaEjb.methodC();//@RunAsで"admin"ロールが割り当てられるのでアクセスできる。 } }
- 使わないアノテーション
@DeclareRoles 新規にロールを作る。
使用可能なロールの設定はejb-jar.xmlにまとめたほうが判りやすく、記述も楽なので使わない。
より細かくアクセス設定をしたい場合は、SessionContext.isCallerInRole() で保持しているロールを確認したり、SessionContext.getCallerPrincipal()から取得できるプリンシパル情報を利用する。