Apache/Tomcat連携してWebアプリケーションを運用して、Basic認証でアクセス制限をかけることを検討しているとします。
Apache側でかけるのか?
Tomcat側でかけるのか?
あれ?ってなりませんか?
結論からいうと、Tomcat側で仕掛けます。
Apacheでは、80ポートのリクエストで特定URLを、AJPプロトコルでTomcatに連携します。
よって、Apache配下のディレクトリを利用しないため、httpd.conf内のDerectoryディレクティブの「AuthType Basic」設定はできません。
というわけで、Tomcat側で仕掛けることになります。
(どやー!って感じでいうことでもないんですが。)
さて、前置きが長くなりましたが、Tomcat6でアプリ毎にBasic認証を行う設定をメモしておきます。
Webアプリケーションのweb.xml
(
<security-constraint> <web-resource-collection> <web-resource-name>FOR_DEMO</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>demouser</role-name> </auth-constraint> </security-constraint> <login-config> <auth-method>BASIC</auth-method> <realm-name>FOR DEMO</realm-name> </login-config>
$TOMCAT_HOME/conf/tomcat-users.xml
<tomcat-users> <role rolename="demouser"/> <user username="[ユーザ名]" password="[パスワード]" roles="demouser"/> </tomcat-users>
userタグのroles属性に、web.xmlの
これで完了です。
まとめ
この方法を使うと、アプリケーション毎にBasic認証でアクセス制限をすることができます。
もちろん、Apache2.2/Tomcat6.0連携で名前ベースのVirtualHostを実現する方法 - DISってHONEY♪ @gungnir_odinに書いた方法で、複数ドメインを運用している場合も使用することができるので、使い方の幅が広がりますね。