【问题标题】:How to define tomcat-users.xml on embedded Tomcat?如何在嵌入式 Tomcat 上定义 tomcat-users.xml?
【发布时间】:2023-03-13 07:15:02
【问题描述】:

我正在使用 Selenium 在 Maven Web 应用程序上运行自动 JUnit 测试。基本上我在嵌入式 Tomcat 服务器 (org.apache.tomcat.embed) 上运行应用程序。该应用程序使用 BASIC 身份验证,因此我需要在嵌入式 tomcat 服务器上以某种方式定义 tomcat-users.xml。我尝试将 tomcat-users.xml 放入 src/main/webapp/META-INF/ 但它不起作用。

我是这样启动服务器的:

tomcat = new Tomcat();
tomcat.setPort(0);
tomcat.addWebapp("/", new File("src/main/webapp/").getAbsolutePath());
tomcat.start();

【问题讨论】:

    标签: java tomcat selenium junit


    【解决方案1】:

    我前段时间发现了这一点,所以这里是为遇到类似问题的人提供的解决方案。基本上你可以直接在java代码中定义tomcat-users.xml中的内容:

    //Add role and user order is important
    tomcat.addRole("userName", "admin");
    tomcat.addRole("userName", "editor");
    tomcat.addUser("userName", "password");
    

    【讨论】:

    • 看来addUseraddRole的顺序很重要。添加用户后添加角色对我不起作用。 (版本 8.0.21)
    【解决方案2】:

    您可以通过添加 context.xml 文件来实现。

    try {
         Context context = tomcat.addWebapp("/test", "PathToTheWebApp");
         context.setConfigFile(Paths.get("PathToTheContextFile").toUri().toURL());
    } catch (ServletException e) {
    
    }
    

    你的 context.xml 应该是这样的。

    <?xml version="1.0" encoding="UTF-8"?>
    <Context>
      <Realm className="org.apache.catalina.realm.MemoryRealm" pathname="PathToUsers.xml"/>
    </Context>
    

    您的 users.xml 文件类似于 tomcat-users.xml 文件。 示例:

    <?xml version='1.0' encoding='utf-8'?>
    <tomcat-users>
        <role rolename="admin"/>
        <user username="admin" password="admin" roles="admin"/>
    </tomcat-users>
    

    【讨论】:

    • users.xml 和 context.xml 是否应该位于资源文件夹中?
    • 不。您可以通过 context.xml 的路径名给出 users.xml 的路径
    猜你喜欢
    • 1970-01-01
    • 2013-02-14
    • 2013-04-05
    • 2019-05-01
    • 2013-05-07
    • 2020-07-10
    • 1970-01-01
    • 1970-01-01
    • 2012-06-11
    相关资源
    最近更新 更多