【问题标题】:web.xml and mixing no-auth and authweb.xml 和混合 no-auth 和 auth
【发布时间】: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 身份验证提示。

我的理解是&lt;security-constraint&gt; 未明确涵盖的所有内容都是开放的,对吗?所以,/openpages/ 不应该使用任何身份验证。

除此之外:我真的不喜欢 &lt;login-config&gt; 是在 webapp 级别而不是在每个安全约束级别指定的事实。这肯定会削弱灵活性吗?

【问题讨论】:

  • 您能试试whitelisting 并使用empty string 作为上下文根吗?
  • @vanOekel。这为我解决了。尤其是白名单是一种选择。你为什么不把它作为一个答案,我会接受它。

标签: java servlets web.xml


【解决方案1】:

默认情况下,security-constraint 未明确涵盖的所有内容均未打开,请使用 whitelisting(简而言之:没有auth-constraintsecurity-constraint 对任何没有登录名的人都可用)。

还请注意url-pattern 的值并不完全直观,请参阅this answer 中的详细信息以及this question 中的多个 url 模式匹配问题的示例(其中/testresource.xml 匹配/* 和@ 987654330@)。

【讨论】:

    猜你喜欢
    • 2011-07-10
    • 2019-05-28
    • 2016-09-05
    • 1970-01-01
    • 2020-09-05
    • 2016-09-07
    • 2022-11-03
    • 2019-02-10
    • 1970-01-01
    相关资源
    最近更新 更多