Realm
接口的一种实现,它通过一个 JNDI 命名的 JDBC 数据源在关系型数据库中查找用户。只要数据库结构符合下列要求,你可以通过大量的配置来灵活地修改现有的表与列名。
Realm
所能识别的所有合法用户所构成的行。
为了设置 Tomcat 从而使用 DataSourceRealm,需要执行以下步骤:
$CATALINA_BASE/conf/server.xml
目录中设置一个 <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)
);
在下面的范例中,有一个名为 authority 的 MySQL 数据库,它包含上述创建的表,通过名为 “java:/comp/env/jdbc/authority
” 的 JNDI 命名的 JDBC 数据源来访问。
<Realm className="org.apache.catalina.realm.DataSourceRealm"
dataSourceName="jdbc/authority"
userTable="users" userNameCol="user_name" userCredCol="user_pass"
userRoleTable="user_roles" roleNameCol="role_name"/>
使用 DataSourceRealm 时必须遵守下列规则:
Realm
的 authenticate()
方法,从而使任何对数据库的即时修改(新用户、密码或角色改变,等等)都能立即生效。