java - web.xml 并混合 no-auth 和 auth

标签 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/不应使用任何身份验证。

更多的是:我真的不喜欢 <login-config>是在 web 应用程序级别指定的,而不是在每个安全约束级别指定的。这肯定会削弱灵 active 吗?

最佳答案

默认情况下,安全约束未明确涵盖的所有内容均不打开,请使用whitelisting为此(简而言之:任何没有登录的人都可以使用没有 auth-constraintsecurity-constraint)。

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

关于java - web.xml 并混合 no-auth 和 auth,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36073655/

相关文章:

java - 如何在 JSP 中导入我的导入?

java - ServletRequest 中的 session 变量

java - 在 Apache XMLRPC 环境中获取请求用户的 IP 地址?

java - Maven 找不到 web.xml

java - { "readyState": 0 ,"status": 0 ,"statusText": "NetworkError: Failed to execute ' send' on 'XMLHttpRequest' : Failed to load 'http://localhost:8088/' .“}

Websphere应用程序修改web.xml不起作用

java - 为什么 Eclipse 自动格式化 block 代码不一致?

java - 使用 ElasticSearch 的 script_upsert 创建文档

c# - Java 的 Serializable 和 C# 的 ISerializable 的区别

java - 嵌入式 Jetty 使用旧版本的 servlet API 运行