Tomcat UserDatabaseRealm 领域实现

UserDatabaseRealm 领域实现是从静态文件 %CATALINA_HOME%/conf/tomcat-users.xml 中读取 Tomcat 所用的用户、密码及角色。且这些用户、密码及角色存在于内存中,只有当 Tomcat 停止后才从内存中清除这些信息。

注意:如果更改了 tomcat-users.xml 文件,需要重启 Tomcat 才会生效。

tomcat-users.xml 文件是使用此领域的关键。它包含一份可以访问 Web 应用程序的用户清单。这是一个简单的 XML 文件,根元素是 <tomcat-users>,根元素下只能使用 <role> 和 <user> 元素。每一个 <role> 元素只有一个 rolename 属性,用来指定角色名称。而每一个 <user> 元素则有三个属性:

(1)username  定义用户名

(2)password  定义用户密码

(3)roles  定义用户拥有的角色,多个角色使用逗号(,)分割

下面是 Tomcat 默认安装中含的 tomcat-users.xml 文件的内容:

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

角色(role)是一组用户,而针对这组用户,Web应用程序可以定义一组特定的功能组合。例如:Manager 应用程序是 Tomcat 内置的一个用来管理(启动、停止、部署等)其他 Web 应用程序的 Web 程序。要使用此应用程序,必须创建属于 manager 角色的用户。当第一次访问 Manager 应用程序时,浏览器要求输入此角色的用户名与密码,而且除非使用该角色的用户登录,否则无法访问包含 Manager 应用程序的目录。

UserDatabaseRealm 并不适合用于生产环境,因为它的唯一更新方式是编写能够经由 JNDI 访问领域的自定义 Servlet。而该 Servlet 需要能够修改内存中的用户数据库,或磁盘上的 tomcat-users.xml 文件。最后,还需要重启 Tomcat,这些修改才能生效。

如果我们在修改 tomcat-users.xml 时,角色配置存在问题,当访问 tomcat 内置应用时就会看见如下错误信息。如下图:

请注意,对于 Tomcat7 及更高版本,使用 Manager 应用程序所需的角色已从单一 manager 角色更改为以下四个角色。您需要分配要访问的功能所需的角色。

  • manager-gui  允许访问HTML图形用户界面和状态页面。

  • manager-script  允许访问文本界面和状态页面。

  • manager-jmx  允许访问JMX代理和状态页面。

  • manager-status  仅允许访问状态页。

修改完 tomcat-users.xml 文件后,需要在 server.xml 文件中开启该领域,配置如下:

<!-- Use the LockOutRealm to prevent attempts to guess user passwords
    via a brute-force attack -->
<Realm className="org.apache.catalina.realm.LockOutRealm">
    <!-- This Realm uses the UserDatabase configured in the global JNDI
            resources under the key "UserDatabase".  Any edits
            that are performed against this UserDatabase are immediately
            available for use by the Realm.  -->
    <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
            resourceName="UserDatabase"/>
</Realm>
说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号