UserDatabaseRealm

Tomcat教程

全部教程

×

UserDatabaseRealm

UserDatabaseRealm 是 Tomcat Realm 接口的一种实现,使用 JNDI 资源来存储用户信息。默认,JNDI 资源是通过一个 XML 文件来提供支持的。它并不是针对大规模生产环境用途而设计的。在启动时,UserDatabaseRealm 会从一个 XML 文档中加载所有用户以及他们角色的信息(该 XML 文档默认位于 $CATALINA_BASE/conf/tomcat-users.xml。)用户、密码以及相应角色通常可利用 JMX 进行动态编辑,更改结果会加以保存并立刻反映在 XML 文档中。

Realm 元素属性

跟之前讨论的一样,为了配置 UserDatabaseRealm,需要在 $CATALINA_BASE/conf/server.xml 中创建  元素。关于 UserDatabaseRealm 中的属性定义可参看 Realm 配置文档

用户文件格式

用户文件使用的格式与 MemoryRealm所使用的相同。

范例

默认的 Tomcat 安装已经配置了内嵌在  元素中的 UserDatabaseRealm,因而可以将其应用于所有的虚拟主机和 Web 应用中。默认的 conf/tomcat-users.xml 文件内容为:

<tomcat-users>
  <user username="tomcat" password="tomcat" roles="tomcat" />
  <user username="role1"  password="tomcat" roles="role1"  />
  <user username="both"   password="tomcat" roles="tomcat,role1" /></tomcat-users>

特别注意事项

使用 UserDatabaseRealm 需要遵循以下规则:

  • Tomcat 首次启动时,它会从用户文件中加载所有已定义的用户及其相关信息。假如对该用户文件中的数据进行修改,则只有重启 Tomcat 后才能生效。这些修改并不是通过 UserDatabase 数据源来完成的,是由 Tomcat 所提供的通过 JMX 访问的 MBean 来实现的。
  • 当用户首次访问一个受保护资源时,Tomcat 会调用这一 Realm 的 authenticate() 方法。
  • 一旦用户认证成功,在登录后,该用户(及其相应角色)就将缓存在 Tomcat 中。(对于以表单形式的认证,这意味着直到会话超时或者无效才会过期;对于基本形式的验证,意味着直到用户关闭浏览器才会过期。)在会话序列化期间不会保存或重置缓存的用户。对已认证用户的数据库信息进行的任何改动都不会生效,直到该用户下次登录。