<servlet-mapping>
      <servlet-name>myName</servlet-name>
      <url-pattern>/aName</url-pattern>
   </servlet-mapping>

    <security-constraint>

            <web-resource-collection>

                    ...

                    <url-pattern>
                            /*
                    </url-pattern>

            </web-resource-collection>

             ...

    </security-constraint>

这是Web.xml的摘录(使用它来配置JBOSS/TOMCAT WEBS服务)。只是想知道是否 url-patternweb-resource-collection 相对于 url-patternservlet-mapping.

有帮助吗?

解决方案

url-pattern 用于选择给定请求的约束并不相对于任何内容。 Servlet规范的有趣部分是:

SRV.12.8.3处理请求

当servlet容器收到请求时,它应使用srv.11.1中描述的算法选择在此处定义的约束(如果有) url-pattern 这是与请求URI的最佳匹配。 如果未选择约束,则容器应接受该请求。否则,容器应确定请求的HTTP方法是否在选定的模式下受到约束。如果不是这样,则应接受请求。否则,请求必须满足适用于 http-methodurl-pattern. 。必须满足以下两个规则,以使请求被接受并派往关联的servlet。

和:

SRV.11.1使用URL路径

收到客户端请求后,Web容器确定要转发其的Web应用程序。选择的Web应用程序必须具有与请求URL的开始相匹配的最长上下文路径。 URL的匹配部分是映射到servlet时的上下文路径。

Web容器下一.

用于映射到servlet的路径是请求对象的请求URL减去上下文路径和路径参数。下面的URL路径映射规则按顺序使用。第一个成功的比赛将无需尝试进一步匹配:

  1. 容器将尝试找到请求路径与servlet路径的确切匹配。成功的比赛选择了servlet。
  2. 该容器将递归尝试匹配最长的路径排名。这是通过使用“/”字符作为路径分离器的一个目录来完成路径树的目录来完成。最长的匹配决定了选定的servlet。
  3. 如果URL路径中的最后一个段包含扩展名(例如.jsp),则Servlet容器将尝试匹配处理扩展名请求的Servlet。扩展名为最后一个''之后的最后一部分的一部分。特点。
  4. 如果前三个规则都没有导致servlet匹配,则容器将尝试提供适合要求资源的内容。如果为应用程序定义了“默认” servlet,则将使用它。

SRV.11.2映射的规范

在Web应用程序部署描述符中,以下语法用于定义映射:

  • 以'/'字符开始并以'/*'后缀结尾的字符串用于路径映射。
  • 以'*。'开头的字符串前缀用作扩展映射。
  • 仅包含“/”字符的字符串表示应用程序的“默认” servlet。在这种情况下,servlet路径是请求URI减去上下文路径,路径信息为空。
  • 所有其他字符串仅用于精确匹配。

其他提示

对我来说是有道理的 Security-Constraint/Web-Resource-Collection/url-Pattern不是 相对于 servlet映射/URL模式, ,由于以下原因:可以有几个 servlet映射 web.xml中的元素,在这种情况下,尚不清楚哪个 servlet映射/URL模式 要解决相对的URI,如果它是一个。 (只是一个猜测 - 我尚未在tomcat中使用安全限制)。

不,他们不是彼此相关的;没有办法绑定给定的 servlet映射安全构成. 。两者都应用于给定的URL模式,安全约束也只能应用于特定的HTTP方法(获取,发布,...),因此它们非常独立。

两个元素均在 servlet规范. 。您可能需要阅读有关安全性以及有关URL-Pattern元素的详细信息的srv.12.8节。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top