なお、MySQLのデータベースにはauth_usersとauth_rolesテーブルを作成済みであり、以下のエントリが登録されていることを前提とします。
■ユーザテーブル
mysql> select * from auth_users;
+-----------+---------------+
| user_name | user_password |
+-----------+---------------+
| hanako | pass |
+-----------+---------------+
1 row in set (0.18 sec)
■ロールテーブル
mysql> select * from auth_roles;
+-----------+-----------+
| user_name | role_name |
+-----------+-----------+
| hanako | admin |
+-----------+-----------+
1 row in set (0.02 sec)
①MySQLのJDBCライブラリ「MySQL Connector/J」を以下のURLからダウンロードします。
ダウンロードした「mysql-connector-java-5.1.18.zip」を解凍し、mysql-connector-java-5.1.18-binをC:\Program Files\Apache Software Foundation\Tomcat 6.0\lib配下にコピーします。
②sever.xml(C:\Program Files\Apache Software Foundation\Tomcat 6.0\conf配下)を修正します。以下のJDBCレルムを追加します。
◎connectionURLには、接続先のMySQLのURLを記載する。
◎connectionNameには、接続用ユーザ名を記載する。
◎connectionPasswordには、接続用パスワードを記載する。
◎userTableには、ユーザテーブル名を記載する。
◎userRoleTableには、ロールテーブル名を記載する。
◎userNameColには、ユーザテーブル/ロールテーブルのユーザに相当するカラム名を記載する。
◎userCredColには、ユーザテーブルのパスワードに相当するカラム名を記載する。
◎roleNameColには、ロールテーブルのロールに相当するカラム名を記載する。
◎connectionURLには、接続先のMySQLのURLを記載する。
◎connectionNameには、接続用ユーザ名を記載する。
◎connectionPasswordには、接続用パスワードを記載する。
◎userTableには、ユーザテーブル名を記載する。
◎userRoleTableには、ロールテーブル名を記載する。
◎userNameColには、ユーザテーブル/ロールテーブルのユーザに相当するカラム名を記載する。
◎userCredColには、ユーザテーブルのパスワードに相当するカラム名を記載する。
◎roleNameColには、ロールテーブルのロールに相当するカラム名を記載する。
<!-- JDBCレルムの設定 -->
<Realm className="org.apache.catalina.realm.JDBCRealm"
driverName="org.gjt.mm.mysql.Driver"
connectionURL="jdbc:mysql://localhost:3306/bushido"
userTable="auth_users" userNameCol="user_name" userCredCol="user_password"
userRoleTable="auth_roles" roleNameCol="role_name"
connectionName="root" connectionPassword="password"/>
③FORM認証をおこなうサンプルアプリをTomcatに配備します。
C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps配下に、SampleAppフォルダを作成し、以下の資源を格納します。
SampleApp
|- login.jsp
|- login_err.html
|- sample.html
|- WEB-INF
| |- web.xml
|- META-INF
|- context.xml
■login.jsp
<html>
<head><title>ログイン画面</title></head>
<body>
<form method="post" action='<%= response.encodeURL("j_security_check")%>'>
<table>
<tr>
<td>ユーザID</td>
<td> <input type="text" name="j_username"></td>
</tr>
<tr>
<td>パスワード</td>
<td><input type="password" name="j_password"></td>
</tr>
</table>
<br>
<input type="submit" value="ログイン" name="submit">
<input type="reset" value="リセット" name="reset">
</form>
</body>
</html>
■web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<security-constraint>
<web-resource-collection>
<web-resource-name>FormAuth</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>FORM</auth-method>
<form-login-config>
<form-login-page>/login.jsp</form-login-page>
<form-error-page>/login_err.html</form-error-page>
</form-login-config>
</login-config>
<security-role>
<role-name>admin</role-name>
</security-role>
</web-app>
■context.xml
<Context docbase="sampleapp" path="sampleapp" reloadable="true" />
③Tomcatを再起動します。
④「http://127.0.0.1:8080/sampleapp/sample.html」にアクセスし、FORM認証画面が表示されることを確認します。また、FORM認証後に、サンプルアプリの画面が表示されることを確認します。
【補足】
Tomcat6には、コンテナ管理機能がある。今回は、トップのserver.xmlにレルム認証の設定をしたが、各コンテナ(アプリ)ごとに異なる認証レルムを設定できる模様(こういう要件は多分にありそう)。
具体的には、各アプリが持つcontext.xmlに記載することで実現できそう。時間があったら調査しよう。
0 件のコメント:
コメントを投稿