web.xml并混合no-auth和auth

时间:2016-03-17 23:43:43

标签: java servlets web.xml

我希望,从单个Web应用程序中,使用身份验证使其部分内容完全打开(或者更具体地说,不使用基于容器的身份验证)。

使用基于容器的身份验证的应用程序部分位于URL /,而打开的部分位于URL /openpages。 (是的,我知道如果反过来可能会更容易,但是不想打开应用程序的源代码)

这是我在web.xml上的尝试:

<web-app>
    ....
    <security-constraint>
        <web-resource-collection>
            <web-resource-name>closedpages</web-resource-name>
            <url-pattern>/</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>*</role-name>
        </auth-constraint>
    </security-constraint>
    <login-config>
        <auth-method>BASIC</auth-method>
    </login-config>
</web-app>

由于我的 url-pattern 表明/而非/*,我认为它应该有用。但它并没有。无论我是否访问http://myhost/http://myhost/openpages/,我都会收到HTTP身份验证提示。只有http://myhost/才会触发HTTP身份验证提示。

我理解的方式是<security-constraint>未明确涵盖的所有内容都是公开的,对吧?因此,/openpages/不应使用任何身份验证。

更多内容:我不太喜欢在{i}}级别指定<login-config>而不是在每个安全约束级别指定的事实。当然这会削弱灵活性?

1 个答案:

答案 0 :(得分:1)

security-constraint未明确涵盖的所有内容均未默认打开,请使用whitelisting(简而言之:没有security-constraint的{​​{1}}可供任何人使用登录)。

另请注意,auth-constraint值并非完全直观,请参阅this answer中的详细信息以及this question中多个网址格式匹配问题的示例(其中url-pattern }匹配/testresource.xml/*)。