JDBCRealm 是 Tomcat Realm 接口的一種實現,它通過 JDBC 驅動程序在關系型數據庫中查找用戶。只要數據庫結構符合下列要求,你可以通過大量的配置來靈活地修改現有的表與列名。
必須有一張用戶表(users table)。它包含著一個由 Realm 所能識別的所有合法用戶所構成的行。
用戶表必須至少包含兩列(當然,如果現有應用確實需要,則同樣也可以包含更多的列):
用戶名:當用戶登錄時,能被 Tomcat 識別的用戶名。
密碼:當用戶登錄時,能被 Tomcat 所識別的密碼。該列中的值可能是明文,也可能是摘要式密碼,稍后詳述。
為了設置 Tomcat 從而使用 JDBCRealm,需要執行以下步驟:
如上所述,為了配置 JDBCRealm,需要創建一個 Realm 元素,并把它放在 $CATALINA_BASE/conf/server.xml 文件中。JDBCRealm 的屬性都定義在 Realm 配置文檔中。
下面這個 SQL 腳本范例創建了我們所需的表(根據你所用的數據庫,可以相應修改其中的語法)。
create table users (
user_name varchar(15) not null primary key,
user_pass varchar(15) not null
);
create table user_roles (
user_name varchar(15) not null,
role_name varchar(15) not null,
primary key (user_name, role_name)
);
Realm 元素包含在默認的 $CATALINA_BASE/conf/server.xml 文件中(被注釋掉了)。在下面的范例中,有一個名為 authority 的數據庫,它包含上述創建的表,通過用戶名“dbuser”和密碼“dbpass”進行訪問。
<Realm className="org.apache.catalina.realm.DataSourceRealm"
dataSourceName="jdbc/authority"
userTable="users" userNameCol="user_name" userCredCol="user_pass"
userRoleTable="user_roles" roleNameCol="role_name"/>
<Realm className="org.apache.catalina.realm.DataSourceRealm"
dataSourceName="jdbc/authority"
userTable="users" userNameCol="user_name" userCredCol="user_pass"
userRoleTable="user_roles" roleNameCol="role_name"/>
JDBCRealm 必須遵循以下規則: