为了使用 Tomcat 容器管理的安全防护机制,我们必须设定领域(Realm)。Tomcat 的领域是用户、密码及角色的集合。Web应用程序可以在 web.xml 中设定哪些用户组可以访问哪些资源,而 Tomcat 的管理员则可以使用一个或多个领域实现来获取用户、密码及角色信息。
Tomcat 设计了一套可插入式的领域架构,并且提供了几种默认的领域实现,如下:
从 tomcat 的 conf/tomcat-user.xml 配置文件中读取用户名、密码和角色。
使用关系数据库来保存用户、密码及角色信息,该领域将自动访问这些用户名和密码。
如果需要让 Tomcat 从 LDAP 目录取得用户名、密码及角色,则可以使用该领域。
由 JAAS(Java Authentication and Authorization Service,Java 验证与授权服务)验证用户的一种领域实现。
当然,Java 的开发者也可以自定义领域实现,以便作为与用户和密码的接口。如果要指定应该使用哪种领域,请在 conf/server.xml 文件中插入 <realm> 元素,以 className 属性设定要使用的领域实现类完全限定名(如 com.hxstrive.realm.MyRealm),然后通过该实现的自定义属性以提供此领域相关的配置信息,如下:
<Realm className="" customAttribute1="" customAttribute2="" />
配置文件后面配置的 <realm> 配置可以覆盖前面配置的 <realm> 配置。例如:如果某个 <realm> 被配置为用于所有 <host> 元素,而不是某一个 <host> 元素。且随后又在 conf/server.xml 文件的某个 <host> 元素中声明了一个 <realm> 元素,则第二个 <realm> 的配置将用于包含该 <realm> 的 <host> 元素。但所有其他 <host> 元素还是使用第一个 <realm> 的配置。
注意:Tomcat 的 Realm API 无法用来添加或移除用户,这不是 Realm 接口的一部分。您必须自己想办法来添加或从领域中移除用户,除非您决定使用的领域刚好实现了这些功能。
在后续章节中我们将详细介绍 tomcat 内置的几种默认领域实现,以及它们的用法。