BASIC認証(web.xmlの編集)

広告

それではBASIC認証を行うための設定を行います。<security-constraint>要素、<login-config>要素、<security-role>要素の3つについてweb.xmlファイルに記述を行います。

項目は多いですが、順を追って見ていきます。

セキュリティロール

まずセキュリティロールを指定します。<security-constraint>要素を使います。

<security-constraint>
  <web-resource-collection>
    <web-resource-name>リソース名</web-resource-name>
    <url-pattern>URLパターン1</url-pattern>
    <url-pattern>URLパターン2</url-pattern>
    <http-method>HTTPメソッド1</http-method>
    <http-method>HTTPメソッド2</http-method>
  </web-resource-collection>

  <auth-constraint>
    <role-name>ロール名1</role-nam>
    <role-name>ロール名2</role-name>
  </auth-constraint>
</security-constraint>

子要素として<web-resource-collection>要素と<auth-constraint>要素を持ちます。

<web-resource-collection>要素は、セキュリティを設定したい対象を表すURLパターンとHTTメソッドを定義します。子要素として<web-resource-name>要素、<url-pattern>要素、<http-method>要素を持ちます。

<web-resource-name>要素にはこのリソース名を指定します。

<url-pattern>要素にはセキュリティの対象となるサーブレットを特定するためのURLパターンを記述します。URLパターンの記述の仕方は『Webアプリケーションの設定』を参照して下さい。URLパターンは複数指定可能です。

<http-method>要素は対象となるHTTPメソッドを記述します。複数指定することができます。省略された場合は全てのHTTPメソッドが対象となります。

これでどんなサーブレットに対するどんなHTTPメソッドが対象となるかを定義できました。

次に<auth-constraint>要素を使ってアクセスを許可するロールを指定します。<auth-constraint>要素は子要素として<role-name>要素を持ちます。

<role-name>要素にアクセスを許可するロールを記述します。複数指定することができます。

認証方法の設定

認証方法の設定を行います。<login-config>要素を使います。

<login-config>
  <auth-method>BASIC</auth-method>
  <realm-name>レルム名</realm-name>
</login-config>

子要素として<auth-method>要素と<realm-name>要素を持ちます。

<auth-method>要素には認証の方式を指定します。指定できる値は「BASIC」「DIGEST」「FORM」「CLIENT-CERT」のどれか1つです。今回BASIC認証を行うには「BASIC」を指定します。

<realm-name>要素にはログインレルムを指定します。

ロールの設定

ロールの設定を行います。<security-role>要素を使います。この要素は管理用アプリケーションなどからロール名を参照するための項目のため必須の項目ではありません。

<security-role>
  <role-name>ロール1</role-name>
  <role-name>ロール2</role-name>
</security-role>

子要素として<role-name>要素を持ちます。

<role-name>要素はロール名を定義します。<auth-constraint>要素内の<role-name>要素に記述した名前と同じ名前を指定します。

実際の設定例

では次の条件で設定を作成します。

リソース名:User Basic Auth
対象サーブレット:このアプリケーションに含まれる全てのサーブレット
対象のHTTPメソッド:全て
許可するロール名:admin
認証方式:BASIC認証
レルム名:User Basic Auth

作成したweb.xmlファイルは次の通りです。

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
  version="2.4">

  <servlet>
    <servlet-name>AuthTest1</servlet-name>
    <servlet-class>AuthTest1</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>AuthTest1</servlet-name>
    <url-pattern>/AuthTest1</url-pattern>
  </servlet-mapping>

  <servlet>
    <servlet-name>AuthTest2</servlet-name>
    <servlet-class>AuthTest2</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>AuthTest2</servlet-name>
    <url-pattern>/AuthTest2</url-pattern>
  </servlet-mapping>

  <security-constraint>
    <web-resource-collection>
      <web-resource-name>User Basic Auth</web-resource-name>
      <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
      <role-name>admin</role-name>
    </auth-constraint>
  </security-constraint>

  <login-config>
    <auth-method>BASIC</auth-method>
    <realm-name>User Basic Auth</realm-name>
  </login-config>

  <security-role>
    <role-name>admin</role-name>
  </security-role>
</web-app>

それでは一度サーブレットを再起動してから、ブラウザで「http://localhost:8080/auth/AuthTest1」へアクセスして下さい。

BASIC認証

上記のようにユーザー名とパスワードを入力するダイアログが表示されます。まだ実際のユーザー名とパスワードを登録していませんが、Tomcatの管理者として登録してあるユーザー名とパスワードを入力するとユーザー認証を通ることができます。

BASIC認証

では次のページでログインするためのユーザー名とパスワードの登録方法について確認していきます。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。