java - 如何以编程方式将用户添加到 tomcat UserDatabaseRealm?

标签 java xml tomcat jdbcrealm

我有一个简单的 Java Web 应用程序,登录用户不超过 20-25 个。我目前使用 tomcat 服务器托管它,并使用 UderDatabaseRealm 进行访问控制。我想向该应用程序添加一项功能,其中管理员可以通过应用程序本身将用户添加到系统中。我想知道是否可以通过编程方式将用户添加到此文件。 我能想到的一种方法是在我的应用程序中打开 tomcat_users.xml 文件并进行 XML 操作以添加用户。还有比这更好的方法吗?

我的领域在 servers.xml 中配置为:-

<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>

My tomcat_users.xml file is as follows:-
<tomcat-users>

  <role rolename="admin"/>
  <role rolename="local"/>
  <user username="tomcat" password="tomcat" roles="admin"/>
</tomcat-users>

最佳答案

您可以使用 JNDI 从运行中的 tomcat 获取 UserDatabase 对象,其中包含有关您的用户和角色的所有信息。您必须在 server.xml 中将 UserDatabase 定义为全局资源,并将资源链接添加到您的 context.xml 文件中,如下所示:

服务器.xml

<GlobalNamingResources>

     <Resource auth="Container" description="User database that can be updated and saved"
        factory="org.apache.catalina.users.MemoryUserDatabaseFactory" name="UserDatabase"
        pathname="/home/user/tomcat-users.xml" type="org.apache.catalina.UserDatabase"
        readonly="false" />

</GlobalNamingResources>

<Realm className="org.apache.catalina.realm.LockOutRealm">

    <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>

</Realm>

你的 webapp 的 context.xml

<Context>

    <ResourceLink name="UserDatabase" global="UserDatabase"
        type="org.apache.catalina.UserDatabase" />

</Context>

现在您可以使用 InitialContext 获取 UserDatabase 对象:

UserDatabase ud = (UserDatabase) new InitialContext().lookup("java:comp/env/UserDatabase");

现在你可以调用这个数据库的方法了:

ud.createUser("username", "password", "fullname");

不要忘记调用 ud.save(); 方法,以便将更改写入 xml 文件。为了保存这个,全局资源的 readonly 属性必须是 false。

关于java - 如何以编程方式将用户添加到 tomcat UserDatabaseRealm?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26761721/

相关文章:

java - 获取单击按钮的文本?

java - 尝试从 Java 中的方法返回 float[]

javax.net.ssl.SSLHandshakeException : sun. security.validator.ValidatorException:PKIX 路径构建失败

python - 将 XML 属性转换为列表,就像在 Python 中使用参数到函数中一样

ssl - 如何解决 : java. io.IOException : jsse. alias_no_key_entry

tomcat - 在 Tomcat 中部署 Axis2 时出现问题

java - 基于 java + tomcat + mysql 构建的 Web 应用程序需要哪些物理资源?

java - 单击其他选项卡上的其他按钮时允许单击按钮

xml - FindBugs/SpotBugs : Filters: DTO or XML Schema

javascript - 链接悬停故障 - 基本 UL 链接使页面在悬停时跳转?