【问题标题】:Do "capture all" servlet filters configured inside deploys wars capture all requests, or only those for the application contained in that war?部署战争中配置的“捕获所有”servlet 过滤器是否捕获所有请求,或者仅捕获该战争中包含的应用程序的请求?
【发布时间】:2016-04-30 15:53:14
【问题描述】:

我正在开发一个使用 Servlet 过滤器执行一些验证的 REST 应用程序。

该应用程序由 6 个部署的服务组成,这些服务部署为 war 文件。该应用程序部署在 Apache TomEE 网络服务器 (1.7.3) 中。该应用程序使用 JAX-RS API 2.0。

每个 web 应用中的端点 URL 遵循相同的模式。

他们都遵循这个模式:

/<2 letter application identifier>-ws-rest/<endpoint name part>/<endpoint name part>

例如:

/cd-ws-rest/install/data
/af-ws-rest/retrieve/user/information

我在 web.xml(位于 APACHE_TOMEE/conf/web.xml 的文件)中配置了 servlet 过滤器:

<filter>
    <filter-name>LoggingFilter</filter-name>
    <filter-class>com.company.LoggingFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>LoggingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

此过滤器捕获所有请求(无论请求针对的是哪个部署的战争)。换句话说,对所有端点的请求(无论端点存在于哪个战争中)都会被此过滤器捕获。

我想更改应用程序,而不是在 TomEE web.xml 中配置过滤器,而是在打包在 war(s) 中的 web.xml 文件中配置它。这将使部署更容易,因为部署应用程序的人不必更改 TomEE 中的 web.xml。

我计划在每个战争中添加一个 web.xml,在路径上

<module name>/src/main/webapp/WEB-INF

但我不确定在已部署战争中配置的过滤器的行为方式。如果我添加一个 url-pattern 为“/*”的过滤器,该过滤器将只捕获该服务的请求还是所有已部署战争的所有请求?

【问题讨论】:

  • 您使用的是哪个版本的 TomEE?请编辑 OP 并添加此信息。
  • 如果后者是真的,那将是一个巨大的安全漏洞。
  • @BalusC 你能否再解释一下你的评论,谢谢!
  • 想象一台服务器为来自独立用户的各种 Web 应用程序提供服务(例如共享主机)。如果一个 webapp 的过滤器可以连接到其他 webapp 的请求,那么它就可以读取和操作其他 webapp 中的所有内容。这当然是不允许的。
  • “我在 web.xml(位于 APACHE_TOMEE/conf/web.xml 的文件)中按如下方式配置了 servlet 过滤器”——这是非标准的,仅适用于使用 Tomcat 作为他们的 Web 容器(TomEE 显然是这样做的)。在每场战争中放置过滤器信息是您想要的方式。恕我直言,应该有一种标准方法来指定全局过滤器,但现在是 2019 年,仍然没有。

标签: rest web.xml servlet-filters apache-tomee


【解决方案1】:

斜线星形映射将使过滤器应用于仅定义了过滤器的 Web 应用程序的所有请求。

根据 servlet 3.0 规范第 6.2.1 节:

部署描述符中的每个 声明只有一个实例 每个容器的 JVM 实例化。容器提供过滤器部署描述符中声明的过滤器配置、对 Web 应用程序的 ServletContext 的引用以及初始化参数集。

以及第 6.2.4 节:

过滤器可以使用 与一组 servlet 和静态内容相关联 过滤器映射样式: 这里的日志过滤器适用于 Web 应用程序中的所有 servlet 和静态内容页面,因为每个请求 URI 都匹配“/*” URL 模式。

可能有特定于服务器的解决方案可能允许将过滤器应用于对所有应用程序发出的所有请求,但默认 servlet 规范定义的行为是将过滤器应用于定义它的应用程序中的请求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-05
    • 2021-01-09
    • 1970-01-01
    • 2017-01-02
    相关资源
    最近更新 更多