我有一个简单的 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。


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!