Java EE 安全模型 Web 集合:差异 URL 模式"/"和"/*"



当涉及到servlet映射时,"/"表示默认的servlet。当涉及到嵌入在 Web 资源集合元素中的 URL 模式时,您如何解释这一点,如下所示:

<security-constraint>
    <web-resource-collection>
        <web-resource-name>fixmyhome</web-resource-name>
        <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>*</role-name>
    </auth-constraint>
    <user-data-constraint>
        <transport-guarantee>NONE</transport-guarantee>
    </user-data-constraint>
</security-constraint>

"/*"呢? 此 URL 模式不是 servlet 映射,因为它被标记 Web 资源集合所包围。

我还注意到使用http://localhost:8081/fixmyhome/main.jsp同时使用URL模式"/"和"/*"会给出相同的结果 - 这就是它为我提供了主.jsp页面。我认为"/"可能不起作用,因为没有通配符。

<url-pattern>正在寻找蚂蚁模式。可用的模式是 ?、* 和 **;分别匹配 1 个字符、0 个或多个字符以及 0 个或多个目录。

http://localhost:8081/fixmyhome/main.jsp的情况下,//*的工作方式相同,因为*不是它们成为字符的要求。

如果你的根目录中有一个资源目录,我想你的<url-pattern>看起来像这样: <url-pattern>/resources/**</url-pattern> ,从而允许您访问资源目录的所有子目录。

这可能有助于提供更清晰的信息:https://ant.apache.org/manual/dirtasks.html

根据这一点,我会说通过编写/限制对servlet的访问,而通过编写/*,您正在限制对特定路径的访问。所以本质上"/"和"/*"是相同的。

安全约束下的 url 模式不属于 servlet 的任何映射,而是一个正则表达式。使用安全约束,您可以允许/限制具有给定 URL 模式的上述角色(在身份验证约束中)的用户。

servlet 规范(版本 3)的第 12.2 节指出:

    以"/"
  • 字符开头并以"/*"后缀结尾的字符串用于路径映射。
  • 以"*."前缀开头的字符串用作扩展映射。
  • 空字符串 (") 是一种特殊的 URL 模式,它完全映射到应用程序的上下文根,即表单的请求 http://host:port/contextroot/.在本例中,路径信息为"/"和 servlet 路径和上下文路径为空字符串 (")。
  • 仅包含"/"字符的字符串指示应用程序的"默认"servlet。在本例中,servlet 路径
    是请求 URI 减去上下文路径,路径信息为 null。

  • 所有其他字符串仅用于完全匹配

最新更新