アクセス制限をweb.xmlの記述だけで実現するJavaTips 〜JSP/サーブレット編

» 2003年10月28日 10時00分 公開
[山田祥寛@IT]

 アプリケーションに認証機能を追加したいと思った場合、もちろん、自分で認証機能を実装することも可能です。しかし、コンテナ(Tomcat)にあらかじめ用意されている機能を利用することで、より簡便に(しかも確実に)認証機能を実現することができます。

操作手順

(1)デプロイメントディスクリプタを定義する

 Tomcatの認証機能を利用するには、デプロイメントディスクリプタ(web.xml)に以下のように認証の定義を記述するだけです。

 ただし、すでになにかしらの記述のあるweb.xmlに追記する場合には、任意の個所に追加することはできませんので、注意してください。

web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
  <security-constraint>
    <web-resource-collection>
      <web-resource-name>User Auth</web-resource-name>
      <url-pattern>/auth/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
      <role-name>admin</role-name>
      <role-name>manager</role-name>
    </auth-constraint>
  </security-constraint>
  <login-config>
    <auth-method>BASIC</auth-method>
    <realm-name>User Auth</realm-name>
  </login-config>
  <security-role>
    <role-name>admin</role-name>
  </security-role>
  <security-role>
    <role-name>manager</role-name>
  </security-role>
</web-app>

 <security-constraint>要素は認証の範囲(<url-pattern>要素)とアクセスを認めるロール名(役割名)とを定義します。つまり、上の設定においては/authフォルダ配下のリソースに対して、admin、managerの権限を持ったユーザーのみがアクセスすることができます。なお、<role-name>要素に指定できるロール名は、<security-role>要素で定義されたものに限られます。

 <login-config>要素は、認証時のログイン方法を指定します(<auth-method>要素)。ここでは「BASIC」を指定していますので、基本認証が採用されます。<realm-name>要素はレルム名(識別名)を表し、認証ダイアログに表示される認証の名前に使用されます。

(2)ユーザー設定ファイルを登録する

 ユーザー設定ファイルの名前はコンテナによって異なりますが、Tomcatの場合、「/conf/tomcat-users.xml」です。ユーザー設定ファイルに以下のような記述を追記してください。

tomcat-users.xml
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
  <role rolename="manager"/>
  <role rolename="admin"/>
  <user username="admin" password="admin" roles="admin,manager"/>
</tomcat-users>

 <role>要素はtomcat-users.xmlで使用するロール名を指定します(省略可能)。<user>要素にはユーザー名/パスワード/ロール名を指定します。1人のユーザーが複数のロール名を持っている場合にはカンマ区切りで記述することができます。

 以上の設定ができたらコンテナを再起動し、「http://localhost:8080/アプリケーション名/auth/」にアクセスしてみましょう。以下のようなダイアログが表示されたら、認証は有効になっています。

基本認証のダイアログ 基本認証のダイアログ

 正しいユーザー名/パスワードを入力した場合にはauthフォルダの内容が、いずれかが間違っていた場合はアクセスできない旨が表示されます。

ログインに成功した場合の表示 ログインに成功した場合の表示
ログイン失敗の場合の表示 ログイン失敗の場合の表示

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。