我希望,从单个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>
而不是在每个安全约束级别指定的事实。当然这会削弱灵活性?
答案 0 :(得分:1)
security-constraint
未明确涵盖的所有内容均未默认打开,请使用whitelisting(简而言之:没有security-constraint
的{{1}}可供任何人使用登录)。
另请注意,auth-constraint
值并非完全直观,请参阅this answer中的详细信息以及this question中多个网址格式匹配问题的示例(其中url-pattern
}匹配/testresource.xml
和/*
)。