我想只在密码保护Jetty WebApp的上下文路径上的根目录。我的上下文路径是/ MyApp,所以我想要一个密码来访问:
http://localhost:8080/MyApp
但不是为了:
http://localhost:8080/MyApp/cometd
我目前的设置如下(注意网址格式):
<security-constraint>
<web-resource-collection>
<web-resource-name>Private Page</web-resource-name>
<url-pattern>/</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>moderator</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>Test Realm</realm-name>
</login-config>
我希望这只能通过/和/ *工作的性质来发挥作用。我也看到过这个资源,我认为这表明这应该非常有效:http://www.coderanch.com/t/364782/Servlets/java/there-key-difference-between-url
但是,对于我的情况,网址模式:
<url-pattern>/</url-pattern>
和
<url-pattern>/*</url-pattern>
似乎表现得完全相同:两者
http://localhost:8080/MyApp
和
http://localhost:8080/MyApp/cometd
同时受密码保护。
当然,如果我更改为/ nothingishere,就像完整性测试一样,除了/ MyApp / nothingishere
之外,没有任何密码保护有谁知道如何只保护web servlet的根目录?
答案 0 :(得分:5)
以下是您的答案:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<security-constraint>
<web-resource-collection>
<web-resource-name>Private Page</web-resource-name>
<url-pattern>/</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>moderator</role-name>
</auth-constraint>
</security-constraint>
<security-constraint>
<web-resource-collection>
<web-resource-name>Public page</web-resource-name>
<url-pattern>/test/*</url-pattern>
</web-resource-collection>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>Test Realm</realm-name>
</login-config>
</web-app>
在此配置中,根目录受密码保护,/test/...
目录不受密码保护。我认为这就是你要求的。
此配置在Tomcat 7+上进行了测试,并且从NetBeans开始创建了一个新项目(如果需要,我可以通过电子邮件向您发送完整的源代码)。
这是输出: