仕様「JSR 318: Enterprise JavaBeansTM,Version 3.1」では、EJB 作成の主なアクターとして、Bean プロバイダー、アプリケーション アセンブラー、デプロイヤー、およびシステム管理者としての役割について言及しています。
各役割がセキュリティの見通しにどのように貢献するかを以下に示します。
- Bean Privider: @RolesAllowed、@DeclareRoles などのアノテーションを使用して、単一のエンタープライズ Bean の論理セキュリティ ビューを定義します。
- アプリケーション アセンブラー: デプロイメント記述子の変更/作成は、アプリケーション全体の論理セキュリティ ビューを定義します。セキュリティ ロール参照をセキュリティ ロールにマップします。
ターゲット企業のシステム環境に存在するユーザー グループ、ユーザー、プリンシパルと混同しないでください。これらは Deployer によって処理されます。 - Deployer: Deployer は、Application Assembler に必要な役割がターゲット システムで使用可能であることを確認します。Application Assembler によって指定されたセキュリティ ビューを、対象の運用環境のセキュリティ ドメインによって使用されるメカニズムとポリシーにマップします。
- システム管理者: システム管理者は、ユーザーを構成し、グループへのメンバーシップを管理します。
各ロールの出力例:
Bean プロバイダー: TestBean.java
@Stateless public class TestBean { @RolesAllowed({"APP-ADMIN"}) public void sayHello() { } }
ejb-jar.xml
<ejb-jar> <enterprise-beans> <session> <ejb-name>TestBean</ejb-name> <ejb-class>org.ejb.test.TestBean</ejb-class> <session-type>Stateless</session-type> </session> </enterprise-beans> </ejb-jar>
Application Assembler: Deployer がターゲット環境のセキュリティー・ドメインにマップする必要があるすべての論理ロールをリストします。
ejb-jar.xml<ejb-jar> <enterprise-beans> <session> <ejb-name>TestBean</ejb-name> <ejb-class>org.ejb.test.TestBean</ejb-class> <session-type>Stateless</session-type> <security-role-ref> <role-name>APP-ADMIN</role-name> <role-link>ADMIN</role-link> </security-role-ref> </session> </enterprise-beans> <assembly-descriptor> <security-role> <role-name>ADMIN</role-name> </security-role> <method-permission> <role-name>ADMIN</role-name> <!-- or APP-ADMIN ?--> <method> <ejb-name>TestBean</ejb-name> <method-name>sayHello</method-name> </method> </method-permission> </assembly-descriptor> </ejb-jar>
Deployer (jboss 4.2.3-GA env): セキュリティ ドメインを作成し、エンタープライズ アプリケーション
login-config.xml のプリンシパル レルムを割り当てます。<application-policy name = "MyUserSecurityDomain"> <authentication> <login-module code = "org.jboss.security.auth.spi.DatabaseServerLoginModule" flag = "required"> <module-option name = "unauthenticatedIdentity">guest</module-option> <module-option name = "dsJndiName">java:/jdbc/MyServerDS</module-option> <module-option name = "hashAlgorithm">MD5</module-option> <module-option name = "hashEncoding">HEX</module-option> <module-option name = "principalsQuery">SELECT password FROM app_user WHERE username = ? </module-option> <module-option name = "rolesQuery">SELECT role, 'Roles' FROM app_user WHERE username = ? </module-option> </login-module> </authentication>
システム管理者: エンタープライズ アプリケーションを使用したい app_user DB テーブルに存在するユーザーがロール ADMIN を持っていることを確認します。
誰でもより完全な例を挙げることができますか? または、不足している可能性があるものを自由に追加したり、指定された例で間違っている可能性があるものを変更したりしてください。セキュリティ フローの完全な例は、EJB を学習している多くの人や、Oracle Certification Expert 1Z0-895 を受験したい人にとって役立ちます。