Tomcatの基本認証にMySQLを利用する

Tomcat の基本認証に MySQL を利用することができます.
ユーザが運用時に変化するような Web アプリの場合にはこれが便利だと思います.
各Webアプリ側の設定はこちら

1. DB 設定

create database authentication;

create table user_table (
user varchar(30),
pass varchar(30)
);

create table role_table (
user varchar(30),
role varchar(30)
);

grant select, insert, update, delete on authentication.*
to 'authtest'@'localhost' identified by 'authtest';

テーブル名,カラム名は自由につけることができますが,以降の設定で合わせる必要があります.

2. server.xml の設定
元々有効になっている「UserDatabaseRealm」に関する部分をコメントにし、
JDBCRealm用として記述されている中のMySQLを使うものをコメントを外して
有効にする.

<!--
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>

    • >

<Realm className="org.apache.catalina.realm.JDBCRealm"
driverName="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost/authentication"
connectionName="authtest" connectionPassword="authtest"
userTable="user_table" userNameCol="user" userCredCol="pass"
userRoleTable="role_table" roleNameCol="role" />

driverName はドライバのクラス名に合わせます.
この例は Connector/J を利用している場合の記述です.
~Table,~Col は 1. で設定したテーブル名,カラム名に合わせます.

3. DB へ入力
テストのために一件登録してみます.
ここではロールを role1 とします.
他のロール名でもかまいません.

insert into user_table (user, pass) values ('sue', 'sue');
insert into role_table (user, role) values ('sue', 'role1');

"Tomcat Webアプリケーションマネージャ"もこのDBを使うようになるので,これを使う場合は
ここで manager ロールも登録しておく必要があります.

4. ドライバを配置
ドライバの入った jar を $CATALINA_HOME/common/endorsed/ 以下に格納

5. tomcat を再起動