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

avi*_*onk 4 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>
Run Code Online (Sandbox Code Playgroud)

Pau*_*gas 5

您可以使用更灵活的东西:数据库.你需要配置一个org.apache.catalina.realm.DataSourceRealm.

DB:

CREATE TABLE tomcat_users (
    user_name varchar(20) NOT NULL PRIMARY KEY,
    password varchar(250) NOT NULL
);
CREATE TABLE tomcat_roles (
    user_name varchar(20) NOT NULL,
    role_name varchar(20) NOT NULL,
    PRIMARY KEY (user_name, role_name) 
);
Run Code Online (Sandbox Code Playgroud)

server.xml:

<Realm className="org.apache.catalina.realm.DataSourceRealm"
   dataSourceName="jdbc/auth"
   digest="MD5"
   userTable="tomcat_users" userNameCol="user_name" userCredCol="password"
   userRoleTable="tomcat_roles" roleNameCol="role_name"/>
Run Code Online (Sandbox Code Playgroud)

context.xml:

<Resource name="jdbc/auth" auth="Container" type="javax.sql.DataSource"
   maxActive="100" maxIdle="30" maxWait="10000"
   username="realm_access" password="password" driverClassName="com.mysql.jdbc.Driver"
   url="jdbc:mysql://localhost:3306/tomcat_realm"/>
Run Code Online (Sandbox Code Playgroud)

请参阅http://wiki.apache.org/tomcat/TomcatDataSourceRealmshttp://java.dzone.com/articles/setting-apache-tomcat-basic中的完整示例


Pat*_*ner 5

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

server.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>
Run Code Online (Sandbox Code Playgroud)

您的webapp的context.xml

<Context>

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

</Context>
Run Code Online (Sandbox Code Playgroud)

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

UserDatabase ud = (UserDatabase) new InitialContext().lookup("java:comp/env/UserDatabase");
Run Code Online (Sandbox Code Playgroud)

现在您可以调用此数据库的方法,如:

ud.createUser("username", "password", "fullname");
Run Code Online (Sandbox Code Playgroud)

不要忘记调用ud.save();方法,以便可以将更改写入xmlfile.要保存它,全局资源的readonly属性必须为false.