- - PR -
EJBの実行権限を管理できるようなフレームワークを探しています
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2008-03-19 23:43
大変抽象的な質問になってしまいますが、今訳があってEJB(Session Bean)を実行する際に、
実行するユーザ(厳密にはBeanを呼び出すメソッド)に権限を付加して、 アクセスコントロールの仕組みを確立して欲しいと上司に頼まれました。 できればフレームワークを使用してこれらを実現させたいとの事なので どなたか、このような権限管理ができるフレームワークを知っていたら 教えて頂けると甚だ幸いです。 システムへの実装はその次の段階で考慮したいので、まずはなるべく多く 意見を頂けると幸いです。 よろしくお願いいたします。 |
|
投稿日時: 2008-03-20 01:48
アプリケーションサーバ毎に使い方は異なるかもしれませんが、J2EEにはレルムというものが標準で備わっていると思います。
普通はそれを使うと思います。 |
|
投稿日時: 2008-03-20 23:24
あちがとうございます。皆様に頂いたアドバイスから
フレームワークを探すのでなく、JAASを使用することに決めました。 現在はJboss(4.2.2-AG)側の設定を終えて、Beanの実行時に、ユーザ名、パスワード チェックによる認証処理、及びユーザ名に紐付いたロール名で、ロール ベースの認証が行えています。 具体的に施した処理を記述すると ============ conf/login-config <!-- Additional Application Policy to test role based authentication --> <application-policy name="ejb3sample"> <authentication> <module-option name ="managedConnectionFactoryName">jboss.jca:service=LocalTxCM,name=DefaultDS</module-option> <login-module code="org.jboss.security.auth.spi.UsersRolesLoginModule" flag="required"> <module-option name="usersProperties">props/users.properties</module-option> <module-option name="rolesProperties">props/roles.properties</module-option> <module-option name="unauthenticatedIdentity">anonymous</module-option> </login-module> </authentication> </application-policy> ----- こちらのセキュリティドメインの設定を追記し、さらにconf/props配下に user.properties, role.propertiesを生成して、ユーザ名ーパスワード ユーザ名ーロール名のマッピングを行いました。 その後に、テスト用のセッションBean ======== SimpleHelloBean package eu.ejb; import javax.annotation.security.PermitAll; import javax.annotation.security.RolesAllowed; import javax.annotation.security.RunAs; import javax.ejb.Stateless; import org.jboss.annotation.ejb.RemoteBinding; import org.jboss.annotation.security.SecurityDomain; import eu.valueprice.jaas.interfaces.SimpleHello; @Stateless @SecurityDomain("java:/jaas/ejb3sample") @RunAs("admin") @RolesAllowed({"admin"}) @RemoteBinding(jndiBinding = "ejb/JAAS") public class SimpleHelloBean implements SimpleHello { @RolesAllowed("admin") public void sayHello() { System.out.println("This is allowed to Admin"); } @PermitAll public void test() { System.out.println("This is allowed to vip"); } } 続いてインタフェースの作成 ===== SimpleHello package eu.interfaces; import javax.ejb.Remote; @Remote public interface SimpleHello { public void sayHello(); public void test(); } 最後にクライアントの作成 ====== Client package eu.client; import java.util.Properties; import javax.naming.Context; import javax.naming.InitialContext; import eu.valueprice.jaas.interfaces.SimpleHello; public class SimpleClient { /** * @param args * @throws Exception */ public static void main(String[] args) throws Exception { Properties props = new Properties(); props.setProperty(Context.SECURITY_PRINCIPAL, "user1"); props.setProperty(Context.SECURITY_CREDENTIALS, "password1"); Context cntxt = new InitialContext(); SimpleHello simpleHello = (SimpleHello) cntxt.lookup("ejb/JAAS"); simpleHello.sayHello(); simpleHello.test(); } } この状態でクライアントを実行すると無事にロールベースの制御を実現 させることができました。 ただ、問題は、Remoteインタフェースから、Localインタフェースに変えて 同じ作業を行ったところ、 ERROR [RoleBasedAuthorizationInterceptor] Insufficient permissions, principal=null, requiredRoles=[admin], principalRoles=[] こんなエラーが返り、認証に失敗しました。ローカルインタフェースの場合は この方法ではだめなのでしょうか??? 誰か知見がございましたら、教えてください。。。 |
1