12. ユーザ情報の管理
サーブレット 12章 ユーザ情報の管理
Tomcatではユーザ情報(ユーザ名・パスワード・ロール名)を管理する方法として、10章で使用したファイル以外の方法も提供しています。この章ではそれらについて説明します。ユーザ情報の管理方法と認証部分は完全に独立していますので、管理方法を変更してもWebアプリケーションに変更を加える必要はありません。 12.1. JDBC Realm/DataSource RealmJDBC RealmおよびDataSource Realmは、データベースでユーザ情報を管理する方法です。 JDBC Realmを使用するには、Tomcatのserver.xmlのMemory Realmの設定に置き換えて、以下のように設定を行います。 <Realm className="org.apache.catalina.realm.JDBCRealm" debug="1" それぞれの属性の意味は、以下の通りです。
userTableおよびuserRoleTableで指定されたテーブルにおいて、ユーザ名が格納されているカラムの名前が同じであるというのが1つの制約です。例えばTomcatの設定が先の通りで、テーブルの中身が以下の通りであるとすると、「hatanaka」ユーザはパスワードが「akihiro」で、「manager」ロールを持つことになります。ユーザ名・パスワード・ロール名を保持した1つのテーブルで情報を管理することも可能です。 usersテーブル
rolesテーブル
DataSource Realmでは「className」に「org.apache.catalina.realm.DataSourceRealm」を指定し、JDBC Realmで行っていた「driverName」および「connectionURL」「connectionName」「connectionPassword」の代わりに「dataSourceName」を指定します。他は同じです。dataSourceNameには、リソースとして登録されている、「javax.sql.DataSource」の名前を指定します。DataSourceおよびそれのTomcatへの登録に関しては、JDBCの「DataSourceからConnectionを取得する」の章を参照してください。 ただし1つ制約があり、DataSource Realmと同じレベルでDataSourceの登録を行っても、DataSource Realmからは見えません。DataSource Realmから見えるようにするには、DataSourceを上位のレベル、サーバレベルに登録する必要があります。サーバレベルで登録を行うためには、Tomcatのserver.xmlの<GlobalNamingResources>内部に設定を行います。<GlobalNamingResources>は<Server>内部に1つ存在します。<GlobalNamingResources>内部の設定は、<Context>内部の場合と同じにしてください。 <GlobalNamingResources>
<Resource name="global/jdbc/connection" auth="Container"
type="javax.sql.DataSource" />
...
</GlobalNamingResouces>
...
<Context>
<Realm className="org.apache.catalina.realm.DataSourceRealm" debug="1"
dataSourceName="global/jdbc/connection"
(実習課題1)前々章・実習課題4のWebアプリケーションを、JDBC Realmを使用するように改良しなさい。 (実習課題2)実習課題1のWebアプリケーションを、DataSource Realmを使用するように改良しなさい。 |
![]()
![]()
|