TomcatでFORM認証する。

前回のBASIC認証を行ったが、そのままFORM認証に切り替える。server.xmlの設定はそのままで、UserDatabasedRealmを使う。


FORM認証

FOMR認証は、Webアプリケーションが保護されているリソースを要求した際に、ユーザーに対してWebページのログインフォームを表示する。FORM認証を指定するには、auth-methodをFORMにセットする。


セキュリティ

セキュリティに関しては、POSTメソッドを使用するため、BASIC認証よりは強くなるが十分とは言えない。セキュリティに重きを置くのであればDIGEST認証が手軽でいいだろう。BASIC認証のweb.xml要素のをDIGESTと書き換えるだけで実現可能だ。暗号化されたユーザー名とパスワードが送信されるため、盗聴の危険性が大きく減る。ただしDIGEST認証だとJavaScriptやWebブラウザによって問題を引き起こすようだ。これに関してはよく調べていない。


ディレクトリ構造

TomcatHome
   +--auth
       +--(login.html)
	   +--(err.html)
       +-- WEB-INF
       |     +-- (web.xml)
       +-- hogedb
	     +-- (hogedb.jsp)

ログイン画面の作成

まずログイン画面を作成する。FORMタグのPOSTメソッドを利用して、ユーザー名とパスワードを送信させる。typt要素はtext、name要素はそれぞれ「j_username」「j_password」「j_security_check」と決められているので、それを指定する。

<html>
<head>
<title>login</title>
</head>
<body>

<center>
<h1>LOGIN</h1>

<p>Please enter your ID and password</p>

<form method="POST" action="j_security_check" name="loginform">
<table>
<tr>
<td>user ID</td>
<td><input type="text" name="j_username" size="32"></td>
</tr>
<tr>
<td>password</td>
<td><input type="password" name="j_password" size="32"></td>
</tr>
<tr>
<td><input type="submit" value="login"></td>
<td><input type="reset" value="reset"></td>
</tr>
</table>
</form>
<center>

</body>
</html>


エラーページの作成

<html>
<head>

<title>Login Failed</title>

</head>
<body>

<h1>Login Failed</h1>

</body>
</html>

web.xmlの編集

web.xmlは要素のをFORMと書き換える。それに加えてを指定しておく。

  <login-config>
    <auth-method>FORM</auth-method>
    <realm-name>hogeWebApp</realm-name>
    <form-login-config>
      <form-login-page>/login.html</form-login-page>
      <form-error-page>/error.html</form-error-page>
    </form-login-config>
  </login-config>

動作確認

以上の設定が正しければ、以下のようなログイン画面が表示されるはずだ。BASIC認証で設定したtomcat-users.xmlに記述したユーザ名とパスワードを入力すれば、目的のページが表示されるはずだ。



ちなみに間違ったパスワードを入力すると、エラーページが表示される。