Realm
接口的一种实现,它通过 JDBC 驱动程序在关系型数据库中查找用户。只要数据库结构符合下列要求,你可以通过大量的配置来灵活地修改现有的表与列名。
Realm
所能识别的所有合法用户所构成的行。
为了设置 Tomcat 从而使用 JDBCRealm,需要执行以下步骤:
$CATALINA_HOME/lib
目录中。注意只能识别 JAR 文件!
$CATALINA_BASE/conf/server.xml
目录中设置一个 <Realm>
元素。这一点下文将会详细叙述。
如上所述,为了配置 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.JDBCRealm"
driverName="org.gjt.mm.mysql.Driver"
connectionURL="jdbc:mysql://localhost/authority?user=dbuser&password=dbpass"
userTable="users" userNameCol="user_name" userCredCol="user_pass"
userRoleTable="user_roles" roleNameCol="role_name"/>
JDBCRealm 必须遵循以下规则:
Realm
的 authenticate()
方法,从而使任何对数据库的即时修改(新用户、密码或角色改变,等等)都能立即生效。