NetBeans IDE での Web アプリケーションのセキュリティー保護
執筆: Dan Kolar、管理: James Branam、Jeff Rubinoff
このドキュメントでは、Tomcat サーバーまたは GlassFish サーバーに配備される Web アプリケーションにセキュリティーを追加する基本的な手順を学ぶことができます。
このドキュメントでは、基本的なログインウィンドウと Web ページのログインフォームを使用してセキュリティー認証を構成する方法を説明します。このドキュメントでは、Tomcat サーバーおよび GlassFish サーバーでユーザーを作成する手順を学ぶことができます。ユーザーを作成したあと、配備記述子でセキュリティープロパティーを設定してセキュリティーロールを作成します。このドキュメントでは、GlassFish サーバーに配備するときに、JDBC 認証を使用してアプリケーションのセキュリティー保護を行う方法も説明します。
予測される所要時間: 40 分
目次
このチュートリアルに従うには、次のソフトウェアとリソースが必要です。
| NetBeans IDE |
Java EE バージョン |
| Java Developer Kit (JDK) |
version 6 または version 7 |
| Java EE プラットフォーム |
Java EE 5 または 6
|
| Travel データベース |
任意 |
| Java EE 互換の Web サーバーまたはアプリケーションサーバー |
Tomcat Web サーバー 7.x および/または
GlassFish Server Open Source Edition 3.1
|
作業環境のインストールと構成
NetBeans IDE をインストールし、起動します。このチュートリアルは、バンドルされた Tomcat サーバーまたは GlassFish サーバーを使用して実行できます。
サーバーがインストールされ、サーバーインスタンスが IDE に登録されていることを確認します。サーバーマネージャーを使用して、インストール済みのサーバーインスタンスを登録できます。(「ツール」>「サーバー」>「サーバーを追加」を選択します。「GlassFish Server <バージョン番号>」または「Tomcat <バージョン番号>」を選択して「次へ」をクリックします。「参照」をクリックし、アプリケーションサーバーのインストールディレクトリを探します。「完了」をクリックします。)
Web アプリケーションの作成
この課題では、まず Web アプリケーションプロジェクトとディレクトリ構造を作成します。次に、セキュリティー保護された各ディレクトリで、単純な html ファイルをいくつか作成します。Web アプリケーションは、セキュリティー保護されたディレクトリへのアクセスに、基本的なログイン認証を使用します。認証にログインフォームを使用する場合は、フォームがある jsp ページを追加できます。
セキュリティー保護されたディレクトリの作成
- 「ファイル」>「新規プロジェクト」(Ctrl-Shift-N) を選択し、「Java Web」カテゴリから「Web アプリケーション」を選択して「次へ」をクリックします。
- プロジェクトに WebApplicationSecurity という名前を付けます。デフォルトの設定を受け入れます。
- (任意) 「ライブラリの格納用に専用フォルダを使用」チェックボックスを選択し、ライブラリフォルダの場所を指定します。このオプションの詳細は、「プロジェクトライブラリの共有」を参照してください。
- 「次へ」をクリックします。
- アプリケーションを配備するサーバーを選択します。IDE に登録されているサーバーのみ表示されます。「次へ」をクリックします。
- フレームワークを追加する必要はないので、「完了」をクリックします。
- EE 6 アプリケーションを作成した場合は、IDE の「プロジェクト」ウィンドウでプロジェクトのノードを右クリックし、「新規」>「その他」>「Web」>「標準の配備記述子 (web.xml)」を選択します。デフォルト設定をすべて受け入れてウィザードを完了します。
注: このチュートリアルでは配備記述子でセキュリティーを構成する方法を示しますが、EE 6 アプリケーションではデフォルトで配備記述子の代わりに注釈を使用します。
- IDE の「プロジェクト」ウィンドウで「Web ページ」を右クリックし、「新規」>「その他」を選択します。
- 「新規ファイル」ウィザードで、「カテゴリ」に「その他」を選択し、「ファイルの種類」に「フォルダ」を選択します。「次へ」をクリックします。
-
「新規フォルダ」ウィザードでフォルダに「secureAdmin」という名前を付け、「完了」をクリックします。
「プロジェクト」ウィンドウの「Web ページ」フォルダに、secureAdmin フォルダが表示されます。
- 前の 3 つの手順を繰り返して、secureUser という名前の別のフォルダを作成します。
- 「プロジェクト」ウィンドウで、フォルダ secureUser を右クリックして「新規」>「HTML」を選択し、secureUser フォルダ内に新しい html ファイルを作成します。
- 新しいファイルに pageU という名前を付け、「完了」をクリックします。
「完了」をクリックすると、ソースエディタでファイル pageU.html が開きます。
- ソースエディタで、pageU.html 内の既存コードを次のコードに置き換えます。
<html>
<head>
<title>User secure area</title>
</head>
<body>
<h1>User Secure Area</h1>
</body>
</html>
- secureAdmin フォルダを右クリックし、pageA という名前の新しい html ファイルを作成します。
- ソースエディタで、pageA.html 内の既存コードを次のコードに置き換えます。
<html>
<head>
<title>Admin secure area</title>
</head>
<body>
<h1>Admin secure area</h1>
</body>
</html>
JSP の索引ページの作成
セキュリティー保護された領域へのリンクを含む JSP の索引ページを作成します。ユーザーがリンクをクリックすると、ユーザー名とパスワードが求められます。基本的なログインを使用している場合、デフォルトブラウザのログインウィンドウが表示されます。ログインフォームページを使用する場合、ユーザーはフォームにユーザー名とパスワードを入力します。
- ソースエディタで index.jsp を開き、次の pageA.html および pageU.html へのリンクを追加します。
<p>Request a secure Admin page <a href="secureAdmin/pageA.html">here!</a></p>
<p>Request a secure User page <a href="secureUser/pageU.html" >here!</a></p>
- 変更を保存します。
ログインフォームの作成 (Tomcat では必須、GlassFish サーバーでは任意)
基本的なログインの代わりにログインフォームを使用する場合、フォームを含む jsp ページを作成できます。ログイン方法を構成するときに、ログインページとエラーページを指定します。
重要: Tomcat ユーザーはログインフォームを作成する必要があります。
- 「プロジェクト」ウィンドウで「Web ページ」フォルダを右クリックし、「新規」>「JSP」を選択します。
- ファイルに login という名前を付け、その他のフィールドはデフォルトの値のままにし、「完了」をクリックします。
- ソースエディタで、login.jsp の <body> タグの間に次のコードを挿入します。
<form action="j_security_check" method="POST">
Username:<input type="text" name="j_username"><br>
Password:<input type="password" name="j_password">
<input type="submit" value="Login">
</form>
- loginError.html という名前の新しい html ファイルを「Web ページ」フォルダに作成します。これは、単純なエラーページです。
- ソースエディタで、loginError.html 内の既存コードを次のコードに置き換えます。
<html>
<head>
<title>Login Test: Error logging in</title>
</head>
<body>
<h1>Error Logging In</h1>
<br/>
</body>
</html>
ターゲットサーバーでのユーザーの作成
Web アプリケーションで、基本的なログインまたはフォームに基づくログインのユーザーおよびパスワードの認証セキュリティーを使用できるようにするには、ユーザーとその適切なロールがターゲットサーバーに対して定義されている必要があります。サーバーにログインするには、そのサーバーにユーザーアカウントが存在している必要があります。
ユーザーとロールの定義方法は、指定したターゲットサーバーに応じて異なります。このチュートリアルでは、セキュリティーの設定をテストするために、admin ユーザーと user ユーザーを使用します。これらのユーザーがそれぞれのサーバーに存在し、適切なロールがユーザーに割り当てられていることを確認する必要があります。
GlassFish サーバーでのユーザーの定義
このシナリオでは、まず GlassFish サーバーの管理コンソールを使用して、user と admin という名前の 2 つの新しいユーザーを作成する必要があります。user という名前のユーザーはアプリケーションへのアクセス権が制限されている一方で、admin は管理権限を持っています。次に、glassfish-web.xml を変更して、これらのユーザーをロールにマッピングする必要があります。glassfish-web.xml はプロジェクトの「構成ファイル」ディレクトリにあります。
注: 3.1 よりも古いバージョンの GlassFish サーバーを使用している場合、構成ファイルの名前は sun-web.xml です。
-
IDE の「サービス」ウィンドウで「サーバー」を展開し、「GlassFish Server」を右クリックし、「管理コンソールを表示」を選択して管理コンソールを開きます。GlassFish サーバーのログインページがブラウザウィンドウで開きます。管理コンソールにアクセスするには、admin のユーザー名とパスワードを使用してログインする必要があります。
注: 管理コンソールにアクセスする前に、Application Server を起動している必要があります。サーバーを起動するには、GlassFish サーバーのノードを右クリックし、「起動」を選択します。
- 管理コンソールで、「設定」>「server-config」>「セキュリティー」>「レルム」>「file」の順に展開します。「レルムを編集」パネルが開きます。

- 「レルムを編集」パネルの上部にある「ユーザーを管理」ボタンをクリックします。「ファイルユーザー」パネルが開きます。
- 「新規」をクリックします。「新しいファイルレルムユーザー」パネルが開きます。「ユーザー ID」に「user」、パスワードに「userpw」と入力します。「了解」をクリックします。
- 前の手順に従って、名前が admin、パスワードが adminpw のユーザーを file レルムに作成します。
Tomcat Web サーバーでのロールとユーザーの定義
Tomcat 7 では、サーバーを NetBeans IDE に登録するときに、manager-script ロールのユーザーとそのユーザーのパスワードを作成します。
Tomcat サーバーの基本的なユーザーとロールは、tomcat-users.xml に定義されています。tomcat-users.xml は、<CATALINA_BASE>\conf ディレクトリにあります。
注: CATALINA_BASE の場所を調べるには、「サービス」ウィンドウで Tomcat サーバーのノードを右クリックして「プロパティー」を選択します。サーバーのプロパティーが表示されます。 CATALINA_BASE の場所は「接続」タブで確認できます。
注: 以前のバージョンの IDE にバンドルされていた Tomcat 6 を使用する場合、このサーバーに存在する ide ユーザーには、パスワードと、administrator および manager のロールが定義されています。ユーザー ide のパスワードは、Tomcat 6 がインストールされるときに生成されます。ユーザー ide のパスワードは変更できます。つまり、tomcat-users.xml にパスワードをコピーできます。
ユーザーを Tomcat に追加する
- <CATALINA_BASE>/conf/tomcat-users.xml をエディタで開きます。
- AdminRole という名前のロールを追加します。
<role rolename="AdminRole"/>
- UserRole という名前のロールを追加します。
<role rolename="UserRole"/>
- 名前が admin、パスワードが adminpw、ロールが AdminRole のユーザーを追加します。
<user username="admin" password="adminpw" role="AdminRole"/>
- 名前が user、パスワードが userpw、ロールが UserRole のユーザーを追加します。
<user username="user" password="userpw" role="UserRole"/>
この時点で、tomcat-users.xml ファイルの内容は次のようになります。
<tomcat-users>
<!--
<role rolename="tomcat"/>
<role rolename="role1"/>
<user username="tomcat" password="tomcat" roles="tomcat"/>
<user username="both" password="tomcat" roles="tomcat,role1"/>
<user username="role1" password="tomcat" roles="role1"/>
-->
...
<role rolename="AdminRole"/>
<role rolename="UserRole"/>
<user username="user" password="userpw" roles="user"/>
<user username="admin" password="adminpw" roles="AdminRole"/>
[User with manager-script role, defined when Tomcat 7 was registered with the IDE]
...
</tomcat-users>
ログイン方法の構成
アプリケーションのログイン方法を構成するには、基本的なログイン認証用のブラウザによって提供されるログインウィンドウを使用できます。または、ログインフォームがある Web ページを作成できます。両方の種類のログイン構成は、ユーザーおよびパスワードによる認証に基づいています。
web.xml を構成することによって、アプリケーションのログイン方法を構成できます。web.xml ファイルは、「プロジェクト」ウィンドウの「構成ファイル」ディレクトリにあります。
基本的なログイン
基本的なログイン構成を使用する場合、ブラウザによってログインウィンドウが表示されます。セキュリティー保護されたコンテンツにアクセスするには、有効なユーザー名とパスワードが必要です。
次の手順は、GlassFish サーバーの基本的なログインの構成方法を示します。Tomcat ユーザーはフォームによるログインを使用する必要があります。
- 「プロジェクト」ウィンドウで「構成ファイル」ディレクトリにある web.xml をダブルクリックし、ビジュアルエディタでファイルを開きます。
- ツールバーの「セキュリティー」をクリックし、セキュリティービューでファイルを開きます。
- 「ログイン構成」ノードを展開し、「ログイン構成」を「基本」に設定します。
注: フォームを使用する場合は、「基本」の代わりに「フォーム」を選択し、ログインページおよびログインエラーページを指定します。
「レルム名」に「file」と入力します。これは、GlassFish サーバーでユーザーを作成した場所のレルム名に対応します。

- 「セキュリティーロール」ノードを展開し、「追加」をクリックしてロール名を追加します。
- 次のセキュリティーロールを追加します。
- AdminRole. このロールに追加したユーザーは、サーバーの secureAdmin ディレクトリへのアクセス権を持ちます。
- UserRole. このロールに追加したユーザーは、サーバーの secureUser ディレクトリへのアクセス権を持ちます。
注意: GlassFish のロール名は先頭が大文字である必要があります。
- 次の手順に従って、AdminConstraint という名前のセキュリティー制約を作成および構成します。
- 「セキュリティー制約を追加」をクリックします。新しいセキュリティー制約のセクションが表示されます。
- 新しいセキュリティー制約の「表示名」に「AdminConstraint」と入力します。

- 「追加」をクリックします。「Web リソースを追加」ダイアログが開きます。
「Web リソースを追加」ダイアログで「リソース名」に「Admin」、「URL パターン」に「/secureAdmin/*」を設定し、「了解」をクリックします。ダイアログが閉じます。
注: アスタリスク (*) を使用すると、そのフォルダにあるすべてのファイルに対するユーザーアクセス権を与えることになります。

- 「認証制約を有効にする」を選択し、「編集」をクリックします。「ロール名を編集」ダイアログが開きます。
- 「ロール名を編集」ダイアログで左の区画の「AdminRole」を選択して「追加」をクリックし、「了解」をクリックします。
前述の手順を完了すると、次の図に示すような結果になるはずです。

- 次の手順に従って、UserConstraint という名前のセキュリティー制約を作成および構成します。
- 「セキュリティー制約を追加」をクリックして新しいセキュリティー制約を作成します。
- 新しいセキュリティー制約の「表示名」に「UserConstraint」と入力します。
- 「追加」をクリックして Web リソースコレクションを追加します。
- 「Web リソースを追加」ダイアログで「リソース名」に「User」、「URL パターン」に「/secureUser/*」を設定し、「了解」をクリックします。
- 「認証制約を有効にする」を選択して「編集」をクリックし、「ロール名」フィールドを編集します。
- 「ロール名を編集」ダイアログで左の区画の「AdminRole」および「UserRole」を選択して「追加」をクリックし、「了解」をクリックします。
注: web.xml でセッションのタイムアウトも設定できます。タイムアウトを設定するには、ビジュアルエディタの「一般」タブをクリックし、セッションの持続時間を指定します。デフォルトは 30 分です。
フォームによるログイン
ログイン用のフォームを使用すると、ログインページおよびエラーページの内容をカスタマイズできます。フォームを使用して認証を構成する手順は、作成したログインページおよびエラーページを指定する以外は基本的なログイン構成と同じです。
次の手順は、ログインフォームの構成方法を示します。
- 「プロジェクト」ウィンドウで「Web ページ」 / 「WEB-INF」ディレクトリにある web.xml をダブルクリックし、ビジュアルエディタでファイルを開きます。
- ツールバーの「セキュリティー」をクリックし、セキュリティービューでファイルを開き、「ログイン構成」ノードを展開します。
- 「ログイン構成」を「フォーム」に設定します。
- 「参照」をクリックして login.jsp を検索し、フォームのログインページを設定します。
-
「参照」をクリックして loginError.html を検索し、フォームのエラーページを設定します。
- GlassFish ユーザー: 「レルム名」に「file」と入力します。これは、GlassFish サーバーでユーザーを作成した場所のレルム名に対応します。Tomcat ユーザーはレルム名を入力しません。
- 「セキュリティーロール」ノードを展開し、「追加」をクリックしてロール名を追加します。
- 次のセキュリティーロールを追加します。
| AdminRole |
このロールに追加したユーザーは、サーバーの secureAdmin ディレクトリへのアクセス権を持ちます。 |
| UserRole |
このロールに追加したユーザーは、サーバーの secureUser ディレクトリへのアクセス権を持ちます。 |
- 次の手順に従って、AdminConstraint という名前のセキュリティー制約を作成および構成します。
- 「セキュリティー制約を追加」をクリックして新しいセキュリティー制約を作成します。
- 新しいセキュリティー制約の「表示名」に「AdminConstraint」と入力します。
- 「追加」をクリックして Web リソースコレクションを追加します。
-
「Web リソースを追加」ダイアログで「リソース名」に「Admin」、「URL パターン」に「/secureAdmin/*」を設定し、「了解」をクリックします。
注: アスタリスク (*) を使用すると、そのフォルダにあるすべてのファイルに対するユーザーアクセス権を与えることになります。

- 「認証制約を有効にする」を選択し、「編集」をクリックします。「ロール名を編集」ダイアログが開きます。
- 「ロール名を編集」ダイアログで左の区画の「AdminRole」を選択して「追加」をクリックし、「了解」をクリックします。
前述の手順を完了すると、次の図に示すような結果になるはずです。

- 次の手順に従って、UserConstraint という名前のセキュリティー制約を作成および構成します。
- 「セキュリティー制約を追加」をクリックして新しいセキュリティー制約を作成します。
- 新しいセキュリティー制約の「表示名」に「UserConstraint」と入力します。
- 「追加」をクリックして Web リソースコレクションを追加します。
- 「Web リソースを追加」ダイアログで「リソース名」に「User」、「URL パターン」に「/secureUser/*」を設定し、「了解」をクリックします。
- 「認証制約を有効にする」を選択して「編集」をクリックし、「ロール名」フィールドを編集します。
- 「ロール名を編集」ダイアログで左の区画の「AdminRole」および「UserRole」を選択して「追加」をクリックし、「了解」をクリックします。
注: web.xml でセッションのタイムアウトも設定できます。タイムアウトを設定するには、ビジュアルエディタの「一般」タブをクリックし、セッションの持続時間を指定します。デフォルトは 30 分です。
セキュリティー配備記述子の構成
アプリケーションを GlassFish サーバーに配備する場合、web.xml に定義されたセキュリティーロールをマッピングするため、glassfish-web.xml にセキュリティー配備記述子を構成する必要があります。web.xml に入力した値は、glassfish-web.xml に表示されます。glassfish-web.xml は、web.xml からこれらの値を取得します。
- 「プロジェクト」ウィンドウで「構成ファイル」ディレクトリにある glassfish-web.xml をダブルクリックします。
注: 3.1 よりも古いバージョンの GlassFish サーバーでは、このファイルの名前は sun-web.xml です。
- 「セキュリティー」タブを選択し、セキュリティーロールを表示します。
- AdminRole のセキュリティーロールノードを選択し、「セキュリティーロールのマッピング」区画を開きます。
「主体を追加」をクリックし、「主体名」に「admin」と入力します。「了解」をクリックします。

- UserRole のセキュリティーロールノードを選択し、「セキュリティーロールのマッピング」区画を開きます。
- 「主体を追加」をクリックし、「主体名」に「user」と入力します。「了解」をクリックします。
- 変更内容を glassfish-web.xml に保存します。
Sun Web Application ビジュアルエディタの右上隅にある「XML で編集」をクリックして、XML エディタで glassfish-web.xml を表示および編集することもできます。XML エディタで glassfish-web.xml を開くと、glassfish-web.xml に次のセキュリティーロールのマッピング情報があることがわかります。
<security-role-mapping>
<role-name>AdminRole</role-name>
<principal-name>admin</principal-name>
</security-role-mapping>
<security-role-mapping>
<role-name>UserRole</role-name>
<principal-name>user</principal-name>
</security-role-mapping>
アプリケーションの配備と実行
「プロジェクト」ウィンドウでプロジェクトノードを右クリックし、「実行」を選択します。
注: プロジェクトはデフォルトで「保存時にコンパイル」機能が有効になっている状態で作成されているので、アプリケーションを IDE で実行するときに先にコードをコンパイルする必要はありません。保存時にコンパイル機能の詳細は、「Java プロジェクトの作成、インポート、および構成」の「保存時にコンパイル」節を参照してください。
アプリケーションをサーバーに構築および配備したあと、Web ブラウザで開始ページが開きます。admin または user のいずれかをクリックして、アクセスするセキュリティー保護された領域を選択します。
ユーザーとパスワードを入力したあと、考えられる結果は次の 3 つです。
このユーザーのパスワードが正しく、ユーザーがセキュリティー保護されたコンテンツに対する権限を持っている場合、セキュリティー保護されたコンテンツページが表示されます。

このユーザーのパスワードが間違っている場合、エラーページが表示されます。

このユーザーのパスワードは正しいが、ユーザーがセキュリティー保護されたコンテンツへのアクセス権を持っていない場合、ブラウザはエラー 403 で要求されたリソースへのアクセスが拒否されたことを表示します。

まとめ
このチュートリアルでは、セキュリティー保護された Web アプリケーションを作成しました。web.xml と glassfish-web.xml の記述子のエディタを使用してセキュリティーの設定を編集し、セキュリティー保護されたログインと複数の ID を持つ Web ページを作成しました。
関連項目
更新日: 2009 年 6 月 18 日