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 必须遵循以下规则: