Tomcat 上での A2A クライアントと Java アプリケーションの統合
このコンテンツでは、サポートされている Apache Tomcat アプリケーション サーバ内の Java コンテナの JDBC 接続プールで使用される認証情報を管理する A2A クライアントを使用する例について説明します。
capam32
このコンテンツでは、サポートされている Apache Tomcat アプリケーション サーバ内の Java コンテナの JDBC 接続プールで使用される認証情報を管理する A2A クライアントを使用する例について説明します。
2
この例では、認証情報のビューアおよび HSQLDB データ ストアを使用して、以下の機能を表示します。
- 認証情報のビューアは、CSPMClient Java クラスを使用して、認証情報マネージャ サーバに保存されている認証情報を表示する方法を示しています。この例を使用して簡単な統合を行い、認証情報マネージャへの接続および認証情報を取得する機能をテストします。例では、画面に認証情報を表示します。
- HSQLDB データ ストアでは、認証情報マネージャ JdbcDriver Java クラスを使用して、データ ストアを設定し、認証情報を取得し、HSQLDB データ ストアに接続する方法を示します。この例では、認証情報を取得し、データ ストアへのアクセスに使用します。
歴史的な理由から、コード サンプル、ファイル、および環境変数名で、A2A は CSPM と呼ばれます。
この例は、以下のいずれかのディレクトリ内のすべての A2A クライアント インストールで使用可能です。
- UNIX:$CSPM_CLIENT_HOME/cloakware/cspmclient/examples/java/Tomcat_Sample
- Windows:%CSPM_CLIENT_HOME%/cloakware/cspmclient/examples/java/Tomcat_Sample
ファイル | 説明 |
ClassFactory.java | サンプル Web アプリケーションで使用されるオブジェクトを作成するために使用するクラス ファクトリ。クラスを使用すると、 CSPMClient クラスを作成して、データベースへの接続の取得に使用されるデータ ソースを取得する初期コンテキスト内での検索を実行できます。 |
CredentialsViewer.java | 認証情報を取得する認証情報マネージャ サーバに接続するために使用するサーブレット クラス。 |
ConnectionTester.java | データベースへの 10 個の接続を構築し、ベーシック SQL ステートメントを実行するために使用するサーブレット クラス。このクラスは、 ClassFactory クラスを使用して、DataSource クラスを取得します。 |
context.xml | 設定ファイルは、HSQLDB ドライバを使用してデータベース リソースを設定する方法、および認証情報マネージャの JdbcDriver Java クラスを使用してセカンド リソースを設定する方法を示します。 |
Tomcat 用の統合プロセス
以下の手順を使用して、アプリケーションが認証情報の管理に認証情報マネージャ サーバを使用するように変更します。
- 開発環境を設定します。「Apache Tomcat の開発環境を設定する」を参照してください。
- 必要に応じて、A2A クライアントを統合して認証情報を取得します。「Apache Tomcat の認証情報のビューア」を参照してください。
- コンテキスト ファイルを作成または変更します。「HSQLDB データ ストアとの Apache Tomcat 接続プール」を参照してください。
- リクエスタを登録します。「Apache Tomcat リクエスタの登録」を参照してください。
Apache Tomcat の開発環境を設定する
Apache Tomcat 開発と認証情報マネージャ統合の両方の開発環境を設定します。
この例には、WAR ファイルの作成と展開に使用できるビルド ディレクトリにある、 Apache ANT ビルド ファイルが含まれています。ビルド ファイルには ANT 1.6.5 以上との互換性があります。
Apache Tomcat の開発環境の設定
Apache Tomcat の開発環境を設定するには、以下の手順を使用します。
以下の手順に従います。
- Apache Tomcat アプリケーション サーバ v5.5 をインストールします。http://archive.apache.org/dist/tomcat/tomcat-5 を参照してください。
- Apache ANT 1.6.5 以上をインストールします。http://ant.apache.org/bindownload.cgi を参照してください。
- ANT_HOME環境変数を設定します。http://ant.apache.org/manual/install.html を参照してください。
- Java データベース HSQLDB 1.8.0 をインストールします。http://sourceforge.net/project/showfiles.php?group_id=23316 を参照してください。
- HSQL_HOME環境変数を、HSQL をインストールしたパス(opt/tools/hsqldbなど)に設定します。
Apache Tomcat と A2A クライアントの統合用の環境の設定
Apache Tomcat との A2A クライアント統合の環境を設定するには、以下の手順を使用します。
以下の手順に従います。
- A2A クライアントlibディレクトリに配置されているcspmclient.jarファイルを Apache Tomcat Common Lib ディレクトリにコピーします。
- UNIX の場合 :コピー元:$CSPM_CLIENT_HOME/cloakware/cspmclient/libコピー先:$APACHE TOMCAT_HOME/common/lib
- Windows の場合:コピー元:%CSPM_CLIENT_HOME%/cloakware/cspmclient/libコピー先:%APACHE TOMCAT_HOME%/common/lib
- A2A クライアントtoolsディレクトリに配置されているcloakwareJdbc.jarファイルを Apache Tomcat Common Lib ディレクトリにコピーします。
- UNIX の場合 :コピー元:$CSPM_CLIENT_HOME/cspmclient/toolsコピー先:$APACHE TOMCAT_HOME/common/lib
- Windows の場合:コピー元:%CSPM_CLIENT_HOME%/cspmclient/toolsコピー先:%APACHE TOMCAT_HOME%/common/lib
以下のディレクトリにある ANT ビルド ファイルを使用して、手順 1 を実行します。- UNIX:$CSPM_CLIENT_HOME/examples/java/Tomcat_Sample/build
- Windows:%CSPM_CLIENT_HOME%/examples/java/Tomcat_Sample/build
このディレクトリから、「ant deploy.driver.lib」を入力します。 - Apache Tomcat のプロパティダイアログを開きます。
- [Java]タブをクリックします。
- [Java Options]の編集フィールドに、以下のテキストを追加します。
- UNIX の場合 :-Djava.library.path=$CSPM_CLIENT_HOME\lib-Dcspm_client_config_file=$CSPM_CLIENT_HOME\config\cspm_client_config.xml
- Windows の場合:-Djava.library.path=%CSPM_CLIENT_HOME%\lib-Dcspm_client_config_file=$CSPM_CLIENT_HOME%\config\cspm_client_config.xml
c:\cloakware\cspmclient)に置き換えてください。 - Apache Tomcat を再起動します。(サービスを停止し、開始します。)以下のディレクトリにある ANT ビルド ファイルを使用して、手順 2 および手順 3 を実行します。
- UNIX:$CSPM_CLIENT_HOME/examples/java/Tomcat_Sample/build
- Windows:%CSPM_CLIENT_HOME%/examples/java/Tomcat_Sample/build
このディレクトリから、「ant deploy.driver.lib」を入力します。
サンプル Tomcat アプリケーションの展開および実行
以下の手順で、Apache ANT タスクを使用して、サンプル Web アプリケーションをコンパイルおよびデプロイします。
以下の手順に従います。
- Apache Tomcat が実行されていることを確認します。
- テキスト エディタ(メモ帳や Vim など)で、以下のディレクトリにある build.properties ファイルを編集します。
- UNIX:$CSPM_CLIENT_HOME/cloakware/cspmclient/examples/java/Tomcat_Sample/build
- Windows:%CSPM_CLIENT_HOME%/cloakware/cspmclient/examples/java/Tomcat_Sample/build
- dir.serverプロパティの値(たとえばC:/Program Files/Apache Software Foundation/Tomcat 5.5)を変更し、ファイルを保存します。
- コマンド ライン ウィンドウを開きます。
- 次のいずれかのディレクトリに移動します。
- UNIX:$CSPM_CLIENT_HOME/cloakware/cspmclient/examples/java/Tomcat_Sample/build
- Windows:%CSPM_CLIENT_HOME%/cloakware/cspmclient/examples/java/Tomcat_Sample/build
- ant start.hsqldを入力して、HSQLDB サーバを起動します。
- antを入力して、サンプルをコンパイルおよび展開します。
- Web ブラウザを開きます。
- 次のページをロードします: http://localhost:8088/cspmTomcatSample。
Apache Tomcat の認証情報のビューア
この例のサーブレットは、
CSPMClient
クラスを使用して、認証情報を取得する方法を示しています。クラス ファクトリを使用して、
CSPMClient
クラスが作成されます。クラス ファイル
package com.cloakware.cspm.sample.web; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.cloakware.jdbc.StatusCodeMapping; import com.cloakware.cspm.client.CSPMClient; import com.cloakware.cspm.sample.ClassFactory; /** * This servlet class is used to retrieve credentials using the * CSPMClient class.<br> * <br> * The user enters a CSPMAlias Name and the servlet displays the information * returned by the CSPMClient class. <br> * <br> * Since the CSPMClient class only returns a status code, the base class * provides a class to convert the status code to a more meaningful sentence. */ public class CredentialsViewer extends HttpServlet { /* Attribute names */ private final String ERROR_MSG = "errorMsg"; /* Parameter names and attributes when refreshing the page */ private final String ALIAS_NAME = "aliasName"; private final String BYPASS_CACHE = "byPassCache"; /* Attributes used when displaying credentials/response from * the CSPMClient class. */ private final String RETURN_CODE = "returnCode"; private final String RETURN_MSG = "returnMsg"; private final String USERNAME = "username"; private final String PASSWORD = "password"; /* Error message */ private final String MSG_ALIAS_EMPTY = "Alias cannot be empty"; /* Response page */ private final String TARGET_JSP = "/index.jsp"; /** * Constructor of the object. */ public CredentialsViewer() { super(); } /** * The doGet method of the servlet. <br> * * This method is called when a form has its tag value method equals to get. * The method retrieves the alias name and the value of the checkbox * indicating if the CSPMClient cache needs to be bypassed. It then calls * the retrieveCredentials method of the CSPMClient class and displays the * results. An error message is displayed if the alias name is missing. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Retrieve the parameters String alias = (String)request.getParameter(ALIAS_NAME); Object byPassCache = request.getParameter(BYPASS_CACHE); // Make sure to redisplay the alias name. request.setAttribute(ALIAS_NAME, alias); request.setAttribute(BYPASS_CACHE, (byPassCache != null) ? "checked" : null); // if we have an alias if (alias != null && !"".equals(alias)) { // Class used to retrieve the credential. CSPMClient cspmClient = ClassFactory.getCSPMClient(); // Retrieve the credentials. if (byPassCache == null) { cspmClient.retrieveCredentials(alias); } else { cspmClient.retrieveCredentials(alias, "true"); } // Set the credentials in the request request.removeAttribute(ERROR_MSG); request.setAttribute(RETURN_CODE, cspmClient.getStatusCode()); String statusMsg = StatusCodeMapping .getStatusText(cspmClient); request.setAttribute(RETURN_MSG, statusMsg); request.setAttribute(USERNAME, cspmClient.getUserId()); request.setAttribute(PASSWORD, cspmClient.getPassword()); } else { // return an error message. request.setAttribute(ERROR_MSG, MSG_ALIAS_EMPTY); request.removeAttribute(RETURN_CODE); } // Get the request dispatcher RequestDispatcher dispatcher = getServletContext() .getRequestDispatcher(TARGET_JSP); // Forward to the jsp file to display the credentials dispatcher.forward(request, response); } }
HSQLDB データ ストアとの Apache Tomcat 接続プール
この例では、認証情報の取得に認証情報マネージャ サーバを使用するための、リソースを変更または作成する方法を示します。WAR ファイルの META-INF ディレクトリにある
context.xml
ファイルに、データ ソース定義を追加できます。A2A クライアントをアプリケーションと統合するには、データ ソースによって使用される JDBC ドライバを変更します。認証情報マネージャの JDBC ドライバは、認証情報マネージャの JDBC URL として認識される任意の JDBC URL を提供するプロキシ JDBC ドライバとして機能します。データ ソースの構成では、特別な認証情報マネージャ スタイルの JDBC URL で使用する、対象となるドライバおよびエイリアスに関する情報を提供します。認証情報マネージャ スタイルの JDBC URL の形式は次のとおりです。
cspm:[url];CSPMDriver=target.driver;CSPMAlias=alias
認証情報マネージャ URL を次のように設定します。
- cspm:プレフィックスで始まることを確認します。
- プレフィックスに続いて標準の JDBC URL を入力します。ユーザ/パスワードの使用は避けてください。例:jdbc:hsqldb:hsql://localhost:9001/cspm1。
- 使用する明示的な JDBC ドライバを示すCSPMDriverを URL に含めます。
- 認証情報マネージャ サーバのデータベース ユーザのエイリアスであるCSPMAliasを URL に割り当てます。
認証情報マネージャの JDBC ドライバを使用する設定ファイル内の属性を変更するには、以下の手順を使用します。
以下の手順に従います。
- 前記の指定に従って、urlを設定します。
- driverClassNameをcom.cloakware.jdbc.JdbcDriverに設定します。
この接続取得の低レベル ドライバ管理は、(認証情報マネージャ サーバによって)データベース パスワードが変更されたユーザが取得したすべての新しい接続が、新しいパスワードを使用して作成されたことを意味します。このアクションは、任意のナレッジまたは所有する任意のデータ ソースの介入なしに自動的に発生します。
新しいパスワードで新しい接続が取得されましたが、古いパスワードで取得した既存の接続がデータ ソースのプール内に残っている可能性があります。また、 エイリアスを新しいユーザに変更する場合、接続プールには(少なくとも一時的に)実際のデータベース ユーザ用の接続が混在します。
このような ドライバによる接続管理で、データベース パスワードの変更がデータ ソースのアクティビティに対して透過的であることを確認します。
この例で使用される XML ファイルは、以下の場所にあります。
- UNIX:$CSPM_CLIENT_HOME/cloakware/cspmclient/examples/java/Tomcat_Sample/main/resources/META-INF
- Windows:%CSPM_CLIENT_HOME%/cloakware/cspmclient/examples/java/Tomcat_Sample/main/resources/META-INF
データ ソース
<Context docBase="SampleDataSources"> <Resource name="jdbc/CSPMSampleDS" auth="Container" type="javax.sql.DataSource" maxActive="10" maxIdle="5" maxWait="10000" username="hsql" password="" driverClassName="com.cloakware.jdbc.JdbcDriver" url="cspm:jdbc:hsqldb:hsql://localhost:9001/cspm1; CSPMAlias=hsql; CSPMDriver=org.hsqldb.jdbcDriver" removeAbandoned="true" removeAbandonedTimeout="30" logAbandoned="true" /> </Context>
Apache Tomcat リクエスタの登録
認証情報マネージャでリクエスタを登録する手順については、「認証情報マネージャ A2A リクエスタの追加および実行」を参照してください。以下のデータを使用します。
パラメータ | 説明 |
スクリプト名 | com.cloakware.cspm.sample.web.CredentialsViewer |
実行パス | C:\Program Files\Apache Software Foundation\Tomcat 5.5\bin |
Type | Java |
パラメータ | 説明 |
スクリプト名 | com.cloakware.client.jdbc.JdbcDriver |
実行パス | C:\Program Files\Apache Software Foundation\Tomcat 5.5\bin |
Type | Java |
HSQLDB とは、Java で記述された SQL リレーショナル データベース エンジンです。HSQLDB は、例ではデータベース サーバとして使用されています。次も参照してください。