我可以访问tomcat管理器并可以上传war文件。其中一场战争是静态网络项目(压缩的html +媒体文件,重命名为* .war)。我想在此战争中添加一个Web-INF / web.xml文件,以使用基本的http auth保护内容。
我知道如何通过添加全局用户并在tomcat-users.xml
中分配角色来实现此目的,但我希望在我的war文件中定义所有用户名和密码。
tomcat-users.xml
?web.xml
?Thx,Juve
答案 0 :(得分:9)
我在这里找到了一个解决方案:http://wiki.metawerx.net/wiki/SecuringYourSiteWithContainerManagedSecurity
该页面介绍了如何定义自己的META-INF/context.xml
指向您自己的WEB-INF/users.xml
。不幸的是,users.xml文件的链接必须是绝对的,我不想对我的配置文件中的OS /文件系统路径做任何假设。
这是我当前的WEB-INF/web.xml
:
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_5.xsd"
version="2.5">
<display-name>SuperCoolTool</display-name>
<description>What an awesome app!</description>
<security-role>
<role-name>manager</role-name>
</security-role>
<security-role>
<role-name>keyuser</role-name>
</security-role>
<security-constraint>
<web-resource-collection>
<web-resource-name>
Entire Application
</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>keyuser</role-name>
<role-name>manager</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>Evaluation Area</realm-name>
</login-config>
</web-app>
匹配的META-INF/context.xml
如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Realm className="org.apache.catalina.realm.MemoryRealm"
pathname="[PATH-TO-YOUR-WEBAPP]/WEB-INF/users.xml"/>
</Context>
答案 1 :(得分:1)
如果您知道tomcat放置所有已部署应用程序的目录,则可以使用相对路径(因为它们是根据catalina.base env.variable解决的,即tomcat home)。
例如,如果您使用eclipse IDE进行部署,通常应用程序部署在wtpwebapps中,因此您可以使用:
<Realm className="org.apache.catalina.realm.MemoryRealm"
pathname="wtpwebapps/YOUR_APP_NAME/WEB-INF/users.xml"/>
还不完美,但至少你没有使用完整路径。
另一种方法是在调用super.setPathname()之前实现自己的扩展MemoryRealm并预处理路径名的Realm;
您还可以使用DataSourceRealm,它没有此问题且适合生产。
对于独立于servlet容器的方法,您可以使用基于过滤器的安全框架(例如Spring security,...)