MemoryRealm 是一种对 Tomcat 的 Realm 接口的简单演示实现,并不是针对生产环境而设计的。在启动时,MemoryRealm 会从 XML 文档中加载所有的用户信息及其相关的角色信息(默认该文档位于 $CATALINA_BASE/conf/tomcat-users.xml)。只有重启 Tomcat 才能使对该文件作出的修改生效。
Realm 元素属性
跟之前讨论的一样,为了配置 MemoryRealm,需要在 $CATALINA_BASE/conf/server.xml 中创建 元素。关于 MemoryRealm 中的属性定义可参看 Realm 配置文档。
用户文件格式
用户文件包含下列属性。默认情况下,conf/tomcat-users.xml 必须是一个 XML 文件,并且带有一个根元素:。每一个有效用户都有一个内嵌在根元素中的 元素。
- name 用户登录所用的用户名。
- password 用户登录所用的密码。如果 元素中没有设置 digest 属性,则采用明文密码,否则就设置为摘要式密码,如之前讨论的那样。
- roles 以逗号分隔的用户角色名列表。
特别注意事项
使用 MemoryRealm 需要注意以下规则:
- 当 Tomcat 首次启动时,它会从用户文件中加载所有已定义的用户及其相关信息。假如对该用户文件中的数据进行修改,则只有重启 Tomcat 后才能生效。
- 当用户首次访问一个受保护资源时,Tomcat 会调用这一 Realm 的 authenticate() 方法。
- 一旦用户认证成功,在登录后,该用户(及其相应角色)就将缓存在 Tomcat 中。(对于以表单形式的认证,这意味着直到会话超时或者无效才会过期;对于基本形式的验证,意味着直到用户关闭浏览器才会过期。)在会话序列化期间不会保存或重置缓存的用户。对已认证用户的数据库信息进行的任何改动都不会生效,直到该用户下次登录。
- 应用负责管理users(用户表)和user roles(用户角色表)中的信息。Tomcat 没有提供任何内置功能来维护这两种表。