WebSphere Application Server for z/OS, Version 6.1   
             オペレーティング・システム: z/OS

             目次と検索結果のパーソナライズ化

EJB アプリケーション用のプログラマチック API による開発

このトピックを使用して、Enterprise JavaBeans (EJB) アプリケーションをプログラマチックにセキュアにします。

このタスクについて

プログラマチック・セキュリティーは、 宣言セキュリティー単独ではアプリケーションのセキュリティー・モデルを表現するのに十分でない場合に、 セキュリティーを重視するアプリケーションによって使用されます。 javax.ejb.EJBContext アプリケーション・プログラム・インターフェース (API) で提供される次の 2 つのメソッドを使用すると、Bean プロバイダーは、エンタープライズ Bean の呼び出し元についてのセキュリティー情報にアクセスできます。

ログイン・モジュールを使用可能にして、これらの呼び出しによって戻されるプリンシパル・クラスを指定できます。

isCallerInRole メソッドが使用されている場合は、このメソッドに渡された役割名を含んでいるサブエレメントである role-name を持つデプロイメント記述子で、security-role-ref エレメントを宣言します。 実際の役割はアプリケーションのアセンブリー段階で作成されるため、論理役割を役割名として使用して、security-role-ref エレメントの記述において、アセンブラーに十分なヒントを提供し、その役割を実際の役割にリンクすることができます。 アセンブリー時に、アセンブラーは role-link サブエレメントを作成して、role-name を実際の役割にリンク します。Rational Application Developer (RAD) などのアセンブリー・ツールを使用すれば、security-role-ref エレメントを作成することができます。 また、アセンブリー・ツールを使用して、アセンブリー段階で security-role-ref エレメントを作成することもできます。

プロシージャー

  1. 必要なセキュリティー・メソッドを EJB モジュール・コードに追加します。
  2. isCallerInRole メソッドで使用されるすべての役割名に対して、 role-name フィールドを使って security-role-ref エレメントを作成します。 開発中に security-role-ref エレメントが作成されない場合は、必ずアセンブリー段階で作成してください。

結果

前のステップを実行すると、EJB アプリケーションはプログラマチックに保護されます。

アプリケーションへのセキュリティー・ポリシーのハードコーディングは、行わないよう強くお勧めします。Java 2 Platform, Enterprise Edition (J2EE) セキュリティー・モデルの宣言的にセキュリティー・ポリシーを指定する機能は、可能な場合には常に推奨されます。 これらの API を使用して、セキュリティーを認識する EJB アプリケーションを開発してください。

EJB アプリケーションが、独自の許可表 (外部リソースとユーザーとの間のマッピング) を使用して外部リソースにアクセスしたり、外部リソースへのアクセスを制御したりする場合は、セキュリティー・ポリシーを宣言的に指定する J2EE セキュリティー・モデル機能を使用することが役に立ちます。 この場合、getCallerPrincipal メソッドを使用して、呼び出し元の ID を取得します。そうすると、アプリケーションは自分の許可表を調べて許可を実行することができます。 呼び出し元の識別は、データベースなどの外部ソース、あるいは別のエンタープライズ Bean から、対応するユーザー情報を取得する場合にも役に立ちます。同様の方法で isCallerInRole メソッドを使用することができます。

作成後、security-role-ref エレメントを以下のように作成することができます。
<security-role-ref>
<description>Provide hints to assembler for linking this role-name to 
actual role here<¥description>
<role-name>Mgr<¥role-name>
</security-role-ref>
アセンブリー時に、アセンブ ラーは、以下に示すように role-link を作成します。
<security-role-ref>
<description>Hints provided by developer to map role-name to role-link</description>
<role-name>Mgr</role-name>
<role-link>Manager</role-link>
</security-role-ref>
プログラマチック EJB コンポーネントの セキュリティー・メソッド (例えば、isCallerInRole および getCallerPrincipal) は、エンタープライズ Bean のどのビジネス・メソッド内へも追加できます。 次に示した、プログラマチック・セキュリティー API のサンプルには、セッション Bean が含まれています。
public class aSessionBean implements SessionBean {

       .....

       // SessionContext extends EJBContext. If it is entity bean use EntityContext
       javax.ejb.SessionContext context;

       // The following method will be called by the EJB container 
       // automatically
       public void setSessionContext(javax.ejb.SessionContext ctx) {
              context = ctx; // save the session bean's context
       }

       ....

       private  void aBusinessMethod()  {
       ....

       // to get  bean's caller using getCallerPrincipal()
       java.security.Principal principal = context.getCallerPrincipal();
       String  callerId= principal.getName();

       // to check if  bean's caller is granted Mgr role
       boolean isMgr = context.isCallerInRole("Mgr");

       // use the above information in any way as needed by the 
       //application 
                          
       ....
       }

       ....
}

次の作業

アプリケーションの開発後、アセンブリー・ツールを使用して役割を作成し、 実際の役割を security-role-ref エレメント内の役割名にリンクしてください。詳しくは、エンタープライズ Bean アプリケーションの保護 を参照してください。



サブトピック
例: Enterprise Bean アプリケーションのコード
関連タスク
エンタープライズ Bean アプリケーションの保護
関連資料
セキュリティー: 学習用リソース
タスク・トピック    

ご利用条件 | フィードバック

最終更新: Jan 21, 2008 9:12:22 PM EST
http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=/com.ibm.websphere.zseries.doc/info/zseries/ae/tsec_ejb.html