将jetty url-pattern匹配到只有根目录

时间:2012-07-16 17:48:13

标签: web-applications servlets passwords jetty cometd

我想只在密码保护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的根目录?

1 个答案:

答案 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开始创建了一个新项目(如果需要,我可以通过电子邮件向您发送完整的源代码)。

这是输出: output