15.5. 配置过滤器


过滤器允许修改请求的某些方面,并可使用 predicates 来控制过滤器执行的时间。过滤器的一些常见用例包括设置标头或执行 GZIP 压缩。

注意

过滤器的功能等同于 JBoss EAP 6 中使用的全局 valve。

可以定义以下类型的过滤器:

  • custom-filter
  • error-page
  • expression-filter
  • gzip
  • mod-cluster
  • request-limit
  • response-header
  • rewrite

此流程解释了如何使用管理 CLI 和管理控制台管理 Undertow 子系统中的过滤器。您可以根据需要更新现有过滤器、创建新过滤器或删除过滤器。

先决条件

  • 您可以访问管理 CLI。
  • 您可以访问管理控制台。
  • 有修改服务器配置的权限。

使用管理控制台管理文件处理程序

您可以使用管理控制台配置过滤器,方法是导航到 Configuration Subsystems Web (Undertow) Filters

使用管理 CLI 管理文件处理程序

以下流程演示了如何使用管理 CLI 配置过滤器

流程

  • 更新现有过滤器

    1. 连接到管理 CLI。
    2. 运行以下命令以更新过滤器的属性:

      ----
      /subsystem=undertow/configuration=filter/response-header=myHeader:write-attribute(name=header-value,value="JBoss-EAP")
      ----
      Copy to Clipboard Toggle word wrap
    3. 重新载入服务器以应用更改:

      ----
      reload
      ----
      Copy to Clipboard Toggle word wrap
  • 创建新过滤器

    1. 连接到管理 CLI。
    2. 运行以下命令以创建新过滤器:

      ----
      /subsystem=undertow/configuration=filter/response-header=new-response-header:add(header-name=new-response-header,header-value="My Value")
      ----
      Copy to Clipboard Toggle word wrap
  • 删除过滤器

    1. 连接到管理 CLI。
    2. 运行以下命令以删除过滤器:

      ----
      /subsystem=undertow/configuration=filter/response-header=new-response-header:remove
      ----
      Copy to Clipboard Toggle word wrap
    3. 重新载入服务器以应用更改:

      ----
      reload
      ----
      Copy to Clipboard Toggle word wrap

15.5.1.1. 配置 buffer-request 处理程序

来自客户端或浏览器的请求由两个部分组成:标头和正文。在典型的情形中,标头和正文发送到 JBoss EAP,两者之间没有任何延迟。但是,如果标头首先发送,然后在几秒钟后发送正文,则会延迟发送完整的请求。此方案在 JBoss EAP 中创建线程,以显示 等待 执行完整请求。

使用 buffer-request 处理程序可以更正发送标头和请求的正文导致的延迟。buffer-request 处理程序尝试在将非阻塞 IO 线程分配给 worker 线程前消耗来自非阻塞 IO 线程的请求。当没有添加 buffer-request 处理程序时,到 worker 线程的线程分配直接发生。但是,当添加 buffer-request 处理程序时,处理程序会在将其分配给 worker 线程前,使用 IO 线程以非阻塞方式缓冲的数据量。

您可以使用以下管理 CLI 命令配置 buffer-request 处理程序:

先决条件

  • 您可以访问管理 CLI。
  • 有修改服务器配置的权限。

流程

  1. 运行以下命令来添加 buffer-request 处理程序:

       ----
       /subsystem=undertow/configuration=filter/expression-filter=buf:add(expression="buffer-request(buffers=1)")
       ----
    Copy to Clipboard Toggle word wrap
  2. 运行以下命令,将处理程序附加到您的服务器和主机:

       ----
       /subsystem=undertow/server=default-server/host=default-host/filter-ref=buf:add
       ----
    Copy to Clipboard Toggle word wrap
  3. 计算缓冲区请求大小:

    `Total_size = num_buffers {MultiplicationSign} buffer_size`
    Copy to Clipboard Toggle word wrap
    Where:
    Copy to Clipboard Toggle word wrap
    • total_size 是在请求分配给 worker 线程前缓冲的数据大小。
    • num_ buffers 是缓冲区数量,由处理程序上的 buffer 参数设置(在本示例中,它被设置为 1)。
    • buffer_size 是每个缓冲区的大小,在 io 子系统中设置(每个请求默认为 16KB)。

      警告

      避免配置非常大的缓冲区请求,或者您可能内存不足。

  4. 重新载入服务器以应用更改:

       ----
       reload
       ----
    Copy to Clipboard Toggle word wrap

15.5.1.2. 了解 SameSite 属性

使用 SameSite 属性在同一站点内定义 Cookie 的可访问性。此属性有助于防止跨站点请求伪造攻击,因为浏览器不会通过跨站点请求发送 Cookie。

您可以使用 undertow 子系统中的 SameSite CookieHandler 为 Cookie 配置 SameSite 属性。使用这个配置,您不需要更改应用程序代码。

15.5.1.3. SameSiteCookieHandler parameters

下表详细介绍了 SameSiteCookieHandler 的参数:

Expand
表 15.4. SameSiteCookieHandler parameters
参数名称存在描述

add-secure-for-none

选填

SameSite 属性模式为 None 时,向 Cookie 添加 Secure 属性。默认值为 true

case-sensitive

选填

指明 cookie-pattern 是否区分大小写。默认值为 true

cookie-pattern

选填

接受 Cookie 名称的正则表达式模式。如果没有指定,则属性 SameSite=<specified-mode&gt; 会添加到所有 Cookie 中。

enable-client-checker

选填

验证客户端应用程序是否与 SameSite=None 属性不兼容。默认值为 true

如果您使用此默认值,并将 SameSite 属性模式设置为 None 以外的值,则参数会忽略验证。

为了防止与不兼容的客户端出现问题,此参数跳过将 SameSite 属性模式设置为 None,且无效。对于来自兼容客户端的请求,该参数会如预期应用 SameSite 属性模式 None

模式

必需

指定 SameSite 属性模式,它可以设置为 Strict、LexNone

为了提高安全性,为了防止跨站点请求伪造攻击,一些浏览器将默认的 SameSite 属性模式设置为 Lax。如需更多信息,请参阅附加资源部分

SameSiteCookieHandler 将属性 SameSite=<specified-mode > 添加到 Cookie,在未指定 cookie-pattern 时与 Cookie-pattern 匹配。cookie-pattern 根据在 区分大小写 时设置的值匹配。

在配置 SameSite 属性前,请考虑以下点:

  • 检查您的应用,以识别 Cookie 是否需要 SameSite 属性,以及是否需要保护这些 Cookie。
  • 对于所有 Cookie,将 SameSite 属性模式设置为 None 可能会导致应用程序更易受攻击。

此流程解释了如何使用 expression-filter 在服务器中配置 SameSiteCookieHandler

先决条件

  • 您可以访问管理 CLI。
  • 有修改服务器配置的权限。

流程

  1. 使用 SameSiteCookieHandler 创建一个新的 expression-filter

    ----
    /subsystem=undertow/configuration=filter/expression-filter=addSameSiteLax:add(expression="path-prefix('/mypathprefix') -> samesite-cookie(Lax)")
    ----
    Copy to Clipboard Toggle word wrap
  2. undertow Web 服务器中启用 expression-filter:

    ----
    /subsystem=undertow/server=default-server/host=default-host/filter-ref=addSameSiteLax:add
    ----
    Copy to Clipboard Toggle word wrap

15.5.1.5. 使用配置文件配置 SameSiteCookieHandler

此流程解释了如何通过添加 undertow-handlers.conf 文件,在应用中配置 SameSiteCookieHandler

先决条件

  • 访问应用程序的源代码。
  • 修改应用程序文件的权限。

流程

  1. undertow-handlers.conf 文件添加到您的 WAR 的 WEB-INF 目录中。
  2. undertow-handlers.conf 文件中,使用特定的 SameSiteCookieHandler 参数添加以下命令:

    ----
    samesite-cookie(mode=<mode>)
    ----
    Copy to Clipboard Toggle word wrap
    Replace `<mode>` with one of the valid values: `Strict`, `Lax`, or `None`.
    Copy to Clipboard Toggle word wrap
    You can also configure other `SameSiteCookieHandler` parameters, such as `cookie-pattern`, `case-sensitive`, `enable-client-checker`, or `add-secure-for-none`.
    Copy to Clipboard Toggle word wrap
  3. 保存文件并重新部署应用程序(如有必要)。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat