2008年3月12日水曜日

managerのみMemoryRealmを利用する

servletの制御をおこなうmanagerアプリケーションのみMemoryRealmを利用するようにできるか調べてみました。
これは、managerアプリケーションとDBを利用するウェブアプリケーションをTomcat上に構築した際に、managerアプリケーションのRealmをDBに入れたくないためです(JDBCRealmで利用するテーブル構造が気に入らないのです)。
Apache Tomcat 6.0のリファレンスを参考にRealmを調べてみると、
Inside a <context> element</context> - This Realm will be used ONLY for THIS web application.
とあるので、CATALINA_HOME/conf/Catalina/localhost/manager.xmlのContextタグ内にRealmタグを付ければよいことになります。というわけでmanager.xmlを以下のようにしてみました。

<Context path="/manager" debug="0" privileged="true">
<Realm className="org.apache.catalina.realm.MemoryRealm"/>
</Context>


これでmanagerアプリケーションのみMemoryRealmを利用するようになったはずです。

さて、MemoryRealmに記載したパスワードはデフォルトでプレインテキストになっているので、これをダイジェストにしてみます。
それには、Realmタグにdigestプロパティを追加すればよくその値として、jaav.security.MessageDigestクラスがサポートしている
MD2、MD5、SHA-1、SHA-256、SHA-384、SHA-512が設定できるようです(Java 6のリファレンス)。
肝心のダイジェストの作成方法ですが、環境変数CATALINA_HOMEとしてTomcatのホームディレクトリが設定されているとして、以下のようにして作成できます。

java -cp %CATALINA_HOME%\lib\catalina.jar;%CATALINA_HOME%\bin\tomcat-juli.jar \
org.apache.catalina.realm.RealmBase -a SHA-256 プレインテキスト


ここで得られた文字列をtomcat-users.xmlのパスワードにコピーし、manager.xmlを以下のように修正します。


<Context path="/manager" debug="0" privileged="true">
<Realm className="org.apache.catalina.realm.MemoryRealm" digest="SHA-256"/>
</Context>

以上です。

0 件のコメント: