server.xml, web.xml, tomcat-users.xmlの3つを変更しないといけなく,IP制限と比べてえらく面倒.
1. まずは/etc/tomcat5/server.xmlのEngine, Host, Contextタグの子要素として,Realmタグを設定する.デフォルトでEngineタグの子要素として記述されているので,基本的に変更しなくても大丈夫.
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
debug="0"
resourceName="UserDatabase" />
2. 次にGlobalNamingResourcesタグの子要素にResourceタグとResourceParamsタグを書いて,UserDatabaseの設定をする.これもすでに記述されていると思うので,pathnameのところでtomcat-users.xmlのパスを指定する位.デフォルトでは$CATALINA_HOME/conf/tomcat-users.xmlを見に行くことになっている.Debian的には/etc/tomcat5/tomcat-users.xml辺りに設定した方がよいような気がして変えてみたのだけど,”java.io.FileNotFoundException: /etc/tomcat5/tomcat-users.xml.new (Permission denied)”って怒られてうまくいかなかった.何で?
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved">
</Resource>
<ResourceParams name="UserDatabase">
<parameter>
<name>factory</name>
<value>org.apache.catalina.users.MemoryUserDatabaseFactory</value>
</parameter>
<parameter>
<name>pathname</name>
<value>conf/tomcat-users.xml</value>
</parameter>
</ResourceParams>
3. 上で設定したtomcat-users.xmlにrolename, username, passwordを設定する.基本的にはrolenameはbasicあたりを設定するのが分かりやすいのではないかと思います.デフォルトでいくつか作られているので,それをちょっといじって使ってもいいんじゃないでしょうか.
<tomcat-users> <role rolename="basic"/> <user username="user" password="passwd" roles="basic"/> </tomcat-users>
4. 最後に/etc/tomcat5/web.xmlに実際に認証をかけるパス等の設定をする.web-appタグの子要素として,security-constraintタグとlogin-configタグを作成して,必要な部分を書き込む.\<url-pattern\>が認証をかけるURLの指定,\<auth-constraint\>が許可するrolenameの指定,\<auth-method\>が認証方式(今回はBASIC認証)の指定.
<security-constraint>
<web-resource-collection>
<web-resource-name>
Authentication
</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>basic</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>UserDatabaseRealm</realm-name>
</login-config>
5. あとは再起動すれば設定完了.
IP制限に比べて格段にややこしい設定になるのは何なんだろう.宇宙意志とかの仕業なんだろうか…….(なにやら拡張性とか云々とかに関するJavaの仕様らしい.)