Java EE 5 でのセキュリティー保護されたエンタープライズ Beans の構築
NetBeans IDE では Java EE 5 仕様がサポートされており、アプリケーション開発を簡単にする Java EE 5 の多数の機能を最大限に活用できます。Java EE 5 仕様の大きな開発特長として、注釈が取り入れられています。注釈を使用すると、アプリケーションのコーディング時に使用する定型コードの多くを除外し、アプリケーションの配備時に必要な設定の量を減らすことができます。
注釈の使用によって大幅に簡素化された領域として、エンタープライズ Beans の開発と設定があります。以前は配備記述子ファイルで指定していた多くの設定プロパティーを注釈で指定できるので、多くの配備記述子ファイルが不要になります。いくつかの配備記述子ファイル (web.xml など) はまだアプリケーションに必要である場合がありますが、IDE のマルチビューの配備記述子エディタによってファイルの編集が非常に簡単になっています。
注釈を使用すると、セキュリティー保護されたエンタープライズ Beans を非常に簡単に構築できます。エンタープライズ Bean のセキュリティーを ejb-jar.xml 配備記述子で設定する代わりに、セキュリティー注釈を使用して認証をソースコード内で直接設定できます。Java EE 5 のエンタープライズアプリケーションには ejb-jar.xml または application.xml は必要ありません。
Java EE 5 仕様の特徴の概要については、「Java EE 5 テクノロジ入門」を参照してください。注釈の仕様については、「JSR 250: Common Annotations for the Java Platform」を参照してください。
このドキュメントでは NetBeans IDE 6.1 リリースを使用します。このドキュメントに示す手順は IDE の version 6.0 にも使用できますが、NetBeans IDE 6.1 の一部のオプションは旧リリースでは使用できません。
予想される所要時間: 30 分
チュートリアルの課題
このチュートリアルに従うには、次のソフトウェアとリソースが必要です。
| NetBeans IDE |
Web および Java EE の version 6.1 または
version 6.0 |
| Java Development Kit (JDK) |
version 6 または
version 5 |
| GlassFish アプリケーションサーバー |
V2 |
このチュートリアルでは、GlassFish または Sun Java System Application Server のローカルインスタンスを IDE に登録する必要があります。IDE の完全版または Web および Java EE 版をインストールした場合、アプリケーションサーバーはすでにインストールされ、登録されているはずです。アプリケーションサーバーが IDE に登録されていない場合は、「ツール」>「サーバー」を選択してサーバーマネージャーでサーバーを登録します。Tomcat Web サーバーにエンタープライズアプリケーションを配備することはできません。
前提条件
このドキュメントは、次のテクノロジについて基本的な知識またはプログラミング経験を持つ読者を想定して書かれています。
- Java プログラミング
- NetBeans IDE
アプリケーションサーバーへのセキュリティーグループの作成
この例では、bank_users グループのユーザーだけがエンタープライズ Bean にアクセスできるようにします。アプリケーションサーバーの file セキュリティーレルムで bank_users グループ内にユーザー manager を作成します。
- 「サービス」ウィンドウでアプリケーションサーバーのノードを右クリックして「起動」を選択し、サーバーを起動します。
- アプリケーションサーバーのノードを右クリックして、「管理コンソールを表示」を選択します。管理コンソールにログインし、左側のナビゲーションバーで「設定」>「セキュリティー」>「レルム」>「file」を選択します。
- 管理コンソールの中央のフレームにある「ユーザーを管理」ボタンをクリックします。「現在のユーザー」の下で「新規」ボタンをクリックします。
- ユーザー ID として「manager」、パスワードとして「password」、グループリストとして「bank_users」と入力します。「了解」をクリックします。
エンタープライズアプリケーションの作成
このエンタープライズアプリケーションは簡単なセッション Bean と、この Bean にアクセスするアプリケーションクライアントから構成されます。
エンタープライズアプリケーションプロジェクトの作成
- 「ファイル」>「新規プロジェクト」(Ctrl-Shift-N) を選択し、「エンタープライズ」カテゴリから「エンタープライズアプリケーション」テンプレートを選択します。「次へ」をクリックします。
- アプリケーション名を Secure にし、プロジェクトの場所を設定します。
- 専用フォルダを使用するオプションが選択されている場合は選択を解除します。
このオプションは、NetBeans IDE 6.1 を使用している場合に使用できます。このチュートリアルでは、ほかのユーザーやプロジェクトとライブラリを共有しないので、プロジェクトライブラリを専用フォルダにコピーする理由はほとんどありません。
「次へ」をクリックします。
- サーバーを GlassFish に設定し、Java EE バージョンを Java EE 5 に設定します。
- 「EJB モジュールを作成」と「アプリケーションクライアントモジュールを作成」を選択し、「Web モジュールを作成」の選択を解除します。「完了」をクリックします。
セッション Bean 内のメソッドのセキュリティー保護
このセッション Bean では複雑な処理は行いません。サンプルの残高を返すだけです。getStatus メソッドを作成し、@RolesAllowed 注釈を付けることでメソッド Bean をセキュリティー保護し、メソッドへのアクセスを許可するセキュリティーロールを指定します。このセキュリティーロールはアプリケーションで使用され、サーバーのユーザーやグループと同じではありません。あとで配備記述子を設定するときに、セキュリティーロールをユーザーとグループにマップします。
セキュリティー注釈はクラス内のメソッドごとに、またはクラス全体に適用できます。この簡単な課題では、@RolesAllowed 注釈をメソッドに付けますが、Java EE 5 仕様では、エンタープライズ Beans で使用できるセキュリティー注釈がほかにも定義されています。
- 「プロジェクト」ウィンドウで EJB モジュールのノード (Secure-ejb) を右クリックし、「新規」>「セッション Bean」を選択します。
- Bean 名を AccountStatus、パッケージ名を bean にし、Bean にリモートインタフェースを設定します。「完了」をクリックします。
「完了」をクリックすると AccountStatusBean が作成され、ファイルがソースエディタで開きます。Bean の AccountStatusRemote リモートインタフェースも作成されます。
- ソースエディタで次のフィールド宣言 (ボールド部分) を AccountStatusBean に追加します。
public class AccountStatusBean implements AccountStatusRemote {
private String amount = "250";
- ソースエディタで AccountStatusBean 内の任意の場所を右クリックし、「EJB メソッド」>「ビジネスメソッドを追加」を選択します。 メソッド名を getStatus にし、戻り値の型を String に設定します。ビジネスメソッドが自動的にリモートインタフェースに公開されます。
- ソースエディタで次に示すボールドの行を getStatus メソッドに追加します。
public String getStatus() {
return "The account contains $" + amount;
}
- 次に示すボールドの部分を入力して getStatus メソッドに注釈を付けます。
@RolesAllowed({"USERS"})
public String getStatus() {
この注釈は、セキュリティーロール USERS のユーザーだけが getStatus メソッドにアクセスできることを示します。
- インポート文を修正し、変更内容を保存します。ファイルに javax.annotation.security.RolesAllowed が追加されていることを確認します。
アプリケーションクライアントからセッション Bean へのアクセス
このアプリケーションには、セッション Bean にアクセスする簡単なメソッドだけが必要です。@EJB 注釈を使用してエンタープライズ Bean を呼び出します。
- 「プロジェクト」ウィンドウで「Secure-app-client」>「ソースパッケージ」>「secure」を展開し、Main.java をダブルクリックしてファイルをソースエディタで開きます。
- ソースエディタ内を右クリックし、「エンタープライズリソース」>「エンタープライズ Bean を呼び出し」を選択します。
- 「エンタープライズ Bean を呼び出し」ダイアログで、「Secure-ejb」ノードを展開し、「AccountStatusBean」を選択します。「閉じる」をクリックします。
セッション Bean を検索できるようにアプリケーションクライアントに次の内容が追加されます。
@EJB
private static AccountStatusRemote accountStatusBean;
- main メソッドを変更して次の内容を追加し、変更内容を保存します。
public static void main(String[] args) {
System.out.println(accountStatusBean.getStatus());
配備記述子の設定
Java EE 5 では、通常はエンタープライズアプリケーションに ejb-jar.xml などの配備記述子ファイルは必要ありません。Secure-ejb または Secure エンタープライズアプリケーションの下にある「構成ファイル」ノードを展開すると、配備記述子がないことがわかります。これまでは ejb-jar.xml 内で設定していたプロパティーの多くを注釈で指定できます。この例では、セッション Bean 内で @RolesAllowed 注釈を使用して EJB メソッドにセキュリティーロールを指定しました。
ただし、アプリケーションにセキュリティーを設定するときは、配備記述子でいくつかプロパティーを指定する必要があります。この例では、エンタープライズアプリケーションで使用しているセキュリティーロール (USERS) を、アプリケーションサーバーで設定したユーザーとグループにマップする必要があります。アプリケーションサーバーに bank_users グループを作成したので、このグループをエンタープライズアプリケーション内のセキュリティーロール USERS にマップする必要があります。そのためには、エンタープライズアプリケーションの sun-application.xml 配備記述子を編集します。
エンタープライズアプリケーションは、実行のために配備記述子が必要ないので、配備記述子はデフォルトで作成されていません。したがって、先に配備記述子を作成してから設定を行う必要があります。
- メインメニューから「ファイル」>「新規ファイル」を選択して「新規ファイル」ウィザードを開きます。「新規ファイル」ウィザードは、「プロジェクト」ウィンドウで Secure エンタープライズアプリケーションプロジェクトを右クリックし、ポップアップメニューから「新規」>「その他」を選択して開くこともできます。
- 「新規ファイル」ウィザードの「カテゴリ」区画で「GlassFish」を選択し、ファイルの種類「GlassFish 配備記述子」を選択します。「次へ」をクリックし、次のパネルで「完了」をクリックします。
「完了」をクリックすると、sun-application.xml が作成され、このファイルがマルチビュー配備記述子エディタで開きます。マルチビューエディタの「セキュリティー」タブを使用してセキュリティーロールのマッピングを設定します。
- 「セキュリティー」タブで「セキュリティーロールマッピングの追加」をクリックし、「セキュリティーロール名」に「USERS」と入力します。
- 「グループの追加」をクリックし、「グループ名」に「bank_users」と入力し、「了解」をクリックします。
- 変更を保存します。
マルチビューエディタ内の「XML」タブをクリックして、配備記述子ファイルを XML ビューに表示できます。配備記述子ファイルに次の内容が含まれることがわかります。
<sun-application>
<security-role-mapping>
<role-name>USERS</role-name>
<group-name>bank_users</group-name>
</security-role-mapping>
</sun-application>
アプリケーションの実行
アプリケーションを実行する準備が整いました。プロジェクトを実行すると、bank_users グループ内のユーザーのユーザー名とパスワードの入力を求められます。
- Secure プロジェクトノードを右クリックし、「プロジェクトを実行」を選択します。IDE は EAR ファイルを構築し、アプリケーションサーバーを起動し (起動していない場合)、EAR ファイルをアプリケーションサーバーに配備します。ユーザー名とパスワードの入力を求めるダイアログが表示されます。

- ダイアログでユーザー名 (manager) とパスワード (password) を入力し、「了解」をクリックします。「出力」ウィンドウに次のように表示されます。
The account contains 250$
この基本的な例では、Java 注釈を使用してエンタープライズ Bean 内のメソッドをセキュリティー保護する方法を示しました。
関連項目
注釈を使用したエンタープライズ Bean のセキュリティー保護の詳細については、次のリソースを参照してください。
NetBeans IDE を使用した Java EE アプリケーションの開発方法についての詳細は、次のリソースを参照してください。
nbj2ee メーリングリストに登録する ことによって、NetBeans IDE Java EE 開発機能に関するご意見やご提案を送信したり、サポートを受けたり、最新の開発情報を入手したりできます。