2014-03-27 78 views
5

我正在使用Selenium在Maven Web應用程序上運行自動JUnit測試。基本上我在嵌入式Tomcat服務器上運行應用程序(org.apache.tomcat.embed)。應用程序使用BASIC身份驗證,所以我需要以某種方式在嵌入式tomcat服務器上定義tomcat-users.xml。我試圖把tomcat-users.xml放到src/main/webapp/META-INF /中,但它不起作用。如何在嵌入式Tomcat中定義tomcat-users.xml?

下面是如何啓動服務器:

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

回答

6

我以前想通了這一點有些時間,所以這裏的人誰也有類似的問題的解決方案。通過增加一個context.xml文件

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

看起來'addUser'和'addRole'的順序很重要。添加用戶後添加角色並不適合我。 (版本8.0.21) –

1

你可以做到這一點:基本上,你可以定義的東西,會在Tomcat的users.xml中直接在Java代碼。

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

應將users.xml和context.xml駐留在resources文件夾內嗎? – gaurav5430

+0

nope。您可以通過context.xml的路徑名來提供users.xml的路徑 –