Red Hat Training

A Red Hat training course is available for Red Hat JBoss Enterprise Application Platform

8.2.5. EJB メソッドパーミッション

アプリケーションアセンブラーは、method-permission 要素宣言を使用して EJB のホームおよびリモートインターフェースメソッドを呼び出すことができるロールを設定できます。

図8.3 Java EE メソッドパーミッション要素

Java EE メソッドパーミッション要素の図
method-permission 要素には、メソッド子要素によって識別される EJB メソッドへのアクセスが許可される論理ロールを定義する 1 つ以上の role-name 子要素が含まれます。role-name 要素の代わりに 確認要素を指定して、認証されたユーザーがメソッド子要素で識別されるメソッドにアクセスできることを宣言することもできます。さらに、exclude-list 要素を持つメソッドにアクセスできないように宣言することもできます。EJB が method-permission 要素を使用してロールによってアクセス可能であることが宣言されていないメソッドがある場合、EJB メソッドはデフォルトで使用から除外されます。これは、exclude-list にメソッドのデフォルトと同等です。

図8.4 Java EE メソッド要素

Java EE メソッド要素の図
メソッド要素宣言には、サポートされるスタイルが 3 つあります。
1 つ目は、名前付きエンタープライズ Bean のすべてのホームおよびコンポーネントインターフェースメソッドを参照するために使用されます。
<method>
  <ejb-name>EJBNAME</ejb-name>
  <method-name>*</method-name>
</method>
2 つ目のスタイルは、名前付きエンタープライズ Bean のホームまたはコンポーネントインターフェースの特定メソッドを参照するために使用されます。
  <method>
    <ejb-name>EJBNAME</ejb-name>
    <method-name>METHOD</method-name>
  </method>
オーバーロード名が同じ複数のメソッドがある場合、このスタイルはオーバーロードされたすべてのメソッドを参照します。
3 つ目のスタイルは、オーバーロード名を持つメソッドのセット内で指定されたメソッドを参照するために使用されます。
<method>
    <ejb-name>EJBNAME</ejb-name>
    <method-name>METHOD</method-name>
    <method-params>
        <method-param>PARAMETER_1</method-param>
        <!-- ... -->
        <method-param>PARAMETER_N</method-param>
    </method-params>
</method>
メソッドは、指定されたエンタープライズ bean のホームまたはリモートインターフェースで定義する必要があります。method-param 要素値は、対応するメソッドパラメーター型の完全修飾名です。同じオーバーロードされた署名を持つ複数のメソッドがある場合、パーミッションは一致するオーバーロードされたすべてのメソッドに適用されます。
オプションの method-intf 要素を使用すると、エンタープライズ Bean のホームインターフェースとリモートインターフェースの両方で定義される名前と署名を持つメソッドを区別することができます。
例8.5「method-permission 要素の使用を示す ejb-jar.xml 記述子フラグメント。」 method-permission 要素の使用の完全な例を提供します。

例8.5 method-permission 要素の使用を示す ejb-jar.xml 記述子フラグメント。

<ejb-jar>
    <assembly-descriptor>
        <method-permission>
            <description>The employee and temp-employee roles may access any
                method of the EmployeeService bean </description>
            <role-name>employee</role-name>
            <role-name>temp-employee</role-name>
            <method>
                <ejb-name>EmployeeService</ejb-name>
                <method-name>*</method-name>
            </method>
        </method-permission>
        <method-permission>
            <description>The employee role may access the findByPrimaryKey,
                getEmployeeInfo, and the updateEmployeeInfo(String) method of
                the AardvarkPayroll bean </description>
            <role-name>employee</role-name>
            <method>
                <ejb-name>AardvarkPayroll</ejb-name>
                <method-name>findByPrimaryKey</method-name>
            </method>
            <method>
                <ejb-name>AardvarkPayroll</ejb-name>
                <method-name>getEmployeeInfo</method-name>
            </method>
            <method>
                <ejb-name>AardvarkPayroll</ejb-name>
                <method-name>updateEmployeeInfo</method-name>
                <method-params>
                    <method-param>java.lang.String</method-param>
                </method-params>
            </method>
        </method-permission>
        <method-permission>
            <description>The admin role may access any method of the
                EmployeeServiceAdmin bean </description>
            <role-name>admin</role-name>
            <method>
                <ejb-name>EmployeeServiceAdmin</ejb-name>
                <method-name>*</method-name>
            </method>
        </method-permission>
        <method-permission>
            <description>Any authenticated user may access any method of the
                EmployeeServiceHelp bean</description>
            <unchecked/>
            <method>
                <ejb-name>EmployeeServiceHelp</ejb-name>
                <method-name>*</method-name>
            </method>
        </method-permission>
        <exclude-list>
            <description>No fireTheCTO methods of the EmployeeFiring bean may be
                used in this deployment</description>
            <method>
                <ejb-name>EmployeeFiring</ejb-name>
                <method-name>fireTheCTO</method-name>
            </method>
        </exclude-list>
    </assembly-descriptor>
</ejb-jar>