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の仕様らしい.)