【发布时间】:2016-03-17 23:43:42
【问题描述】:
我希望从单个 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/ 不应该使用任何身份验证。
除此之外:我真的不喜欢 <login-config> 是在 webapp 级别而不是在每个安全约束级别指定的事实。这肯定会削弱灵活性吗?
【问题讨论】:
-
您能试试whitelisting 并使用empty string 作为上下文根吗?
-
@vanOekel。这为我解决了。尤其是白名单是一种选择。你为什么不把它作为一个答案,我会接受它。