如何在嵌入式Tomcat上定义tomcat-users.xml?

时间:2014-03-27 11:26:06

标签: java tomcat selenium junit

我使用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();

2 个答案:

答案 0 :(得分:6)

我前段时间已经想到这一点,所以这里有一个有类似问题的人的解决方案。基本上,您可以直接在java代码中定义tomcat-users.xml中的内容:

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

答案 1 :(得分:1)

您可以通过添加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>