写真1●CreateUserページ
写真1●CreateUserページ
[画像のクリックで拡大表示]
写真2●LDAP Browserでインポート後の状態
写真2●LDAP Browserでインポート後の状態
[画像のクリックで拡大表示]
写真3●LDAPサーバーに管理アカウントで接続する場合の設定
写真3●LDAPサーバーに管理アカウントで接続する場合の設定
[画像のクリックで拡大表示]
写真4●LDAPレルムを用いた認証が成功
写真4●LDAPレルムを用いた認証が成功
[画像のクリックで拡大表示]

 前回は、Apache Software Fundationが約2年の歳月をかけて開発し、先日バージョン1.0をリリースしたオープンソースの J2EE アプリケーションサーバーGeronimoを紹介した。今回は、さらに深くGeronimoを解説してゆく。

付属アプリケーションDayTrader

 前回 Webコンテナに JSF+Spring+Hibernate という最近では一般的な構成のアプリケーションをデプロイし、その手順などを紹介した。すなわち 組み込まれている Webコンテナ(TomcatとJettyから選択できるが Tomcat版を利用)のみを使ったアプリケーションを試したことになる。

 今回は、EJBを用いたアプリケーションをデプロイし、J2EEアプリケーションサーバーの重要な機能である EJB コンテナを試してみたい。筆者が一通り試したところ、特に問題なく動作しておりGeronimoに期待以上の安定感を感じた。

 今回は、Geronimo に付属している DayTrader というアプリケーションを利用してみた。DayTraderアプリケーション自体はオンライン株取引アプリケーションだが、アプリケーション内ではサーブレット、JSP、Webサービス、jEJB(Session Bean、Container-managed Persistence[CMP] Entity Bean、Message Driven Bean)を利用しており、J2EEサーバーの様々な機能のテストも兼ねるように設計されている。

 DayTraderアプリケーションは、Geronimoをインストールし起動すれば既にデプロイ済みとなっており利用な状態にある(Geronimoのインストールおよび起動の方法は前回を参照していただきたい)。デプロイされているアプリケーションを参照するには、Geronimoの管理コンソールから参照可能だ。管理コンソールには、Geronimo起動後にWebブラウザより http://<ホスト>:8080/console/ にアクセスし、 ユーザー名 system パスワード manager でログインする

Geronomiのユーザー管理

 まずは、ユーザー管理機能から紹介してゆこう。

 管理コンソールへログインできるユーザーは初期状態では1つのみ定義されている。新しいユーザーの定義は管理コンソールから行える。定義を行う場合、管理コンソールの[Console Realm]メニューを選択し、表示される[Create New User]を選択することでCreateUserのページ(写真1)が表示され新しい管理ユーザーを追加することができる。

 この定義は %GERONIMO_HOME%/var/security にある users.properties と groups.properties を編集することによってよって行われている。例えば新しい管理ユーザー root が追加された場合には、 users.properties が下記のように編集される。リスト1のように「ユーザー名=パスワード」という単純な書式で、ユーザーのリストを管理している。

リスト1●users.properties

system=manager
root=root

 ユーザーの権限を管理しているのは groups.properties ファイルだ。このファイルはリスト2のように「グループ名=ユーザー名のリスト」の書式で記述されている。

リスト2●groups.properties

admin=system、root

 これらのファイルを直接編集しても同様の作業が行えるが、編集ミスをなくすためにもユーザー管理に限らず、管理コンソールから行えることは管理コンソールから行うべきだろう。

 管理コンソールアプリケーションは実際には直接これらファイルを参照している訳ではない。管理コンソールアプリケーションは、Geronimoが提供する JAAS(Java Authentication and Authorization Service)の機能を用いている。その定義内でレルム geronimo-properties-realm 内に定義されている admin ロールをもったユーザーのみがアプリケーションにアクセス可能であるように定義しているのだ(リスト3)。

リスト3●管理コンソールアプリケーションのWebデプロイメントディスクリプタ(抜粋)

    <security-constraint>
        <web-resource-collection>
            <web-resource-name></web-resource-name>
            <url-pattern>/portal/*</url-pattern>
            <http-method>GET</http-method>
            <http-method>POST</http-method>
            <http-method>PUT</http-method>
        </web-resource-collection>
        <auth-constraint>
            <role-name>admin</role-name>
        </auth-constraint>
    </security-constraint>
    <security-constraint>
        <web-resource-collection>
            <web-resource-name></web-resource-name>
            <url-pattern>/secure/*</url-pattern>
            <http-method>GET</http-method>
            <http-method>POST</http-method>
            <http-method>PUT</http-method>
        </web-resource-collection>
        <auth-constraint>
            <role-name>admin</role-name>
        </auth-constraint>
        <user-data-constraint>
            <transport-guarantee>CONFIDENTIAL</transport-guarantee>
        </user-data-constraint>
    </security-constraint>
    <login-config>
        <auth-method>FORM</auth-method>
        <realm-name>geronimo-properties-realm</realm-name>
        <form-login-config>
            <form-login-page>/login.jsp</form-login-page>
            <form-error-page>/loginerror.jsp</form-error-page>
      </form-login-config>
    </login-config>
    <security-role>
        <role-name>admin</role-name>
    </security-role>

 レルムとはユーザー名とパスワード、グループなどのリソースである。このレルムの管理は、管理コンソールの[Security Realms]メニューを選択すればよい。初期状態では管理コンソールアプリケーション用のレルムである geronimo-properties-realm と、ldap-realmが定義されている。前者は先ほどのpropertiesファイルを用いたユーザー管理、後者は LDAP によるユーザー管理が行われている。

GeronimoのLDAPレルムを試す

 ではこのGeronimoのLDAPレルムを試してみよう。このLDAPレルムが参照しているLDAPサーバーは Pure Java のLDAPサーバーApache Directory Serverだ。

 このサーバーは Geronimo に組み込まれているためGeronimo起動と共に起動され有効になる。初期状態ではこのLDAP内には管理ユーザー以外のユーザーは登録されていない。今回は新しいユーザーを追加するのに、GeronimoのLDAPデモ用に用意されている LDIFファイル(LDAP Data Interchange File )をインポートした。このファイルは http://localhost:8080/ldap-demo/geronimo-realm.ldif にアクセスすることで入手可能だ。

 インポートすると systemとuser1とuser2 という3ユーザーが インポートされる。筆者はインポートにJavaで記述されているLDAPクライアントLDAP Browser/Editorを用いて行ったが、OpenLDAPが配布しているクライアントツールを用いてもよい。写真2は、LDAP Browserでインポート後の状態を表示している。いずれの方法にせよ、写真3の設定で Geronimo が内蔵する LDAP サーバーに管理アカウントで接続することができる。

 インポートが完了したら LDAP 認証のデモプログラムのURL http://localhost:8080/ldap-demo/protect/hello.html にアクセスすれば、LDAPレルムを用いた認証が成功する(写真4)。

 後半では、実際にEJBをデプロイし、デモ・アプリケーションを動かすまでを解説する。

後編に続く

■著者紹介
黒住幸光(くろずみ ゆきみつ)氏
株式会社アークシステム システム構築スペシャリスト。1995年,スーパー・コンピュータ向け言語処理環境の研究中に,生まれて間もないJavaと出会う。のちにJavaに専念するため転職を決意。現在,株式会社アークシステムにてオープンソース・ソフトウエアを用いたWWWシステムの構築,コンサルティングを行うかたわら,雑誌への執筆,StrutsユーザーMLの管理,Ja-JakartaプロジェクトTurbine翻訳の取りまとめなど幅広く活動中。著書に「Apache Strutsハンドブック」(発行:ソフトバンクパブリッシング)がある。メール・アドレスは,yukimi_2@yahoo.co.jp