17.8. 配置过滤器


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

注意

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

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

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

以下示例演示了如何使用管理 CLI 配置过滤器。您还可以通过导航到 Configuration Subsystems Web(Undertow) Filters 来配置使用管理控制台的过滤器。

更新现有过滤器

更新现有过滤器:

/subsystem=undertow/configuration=filter/response-header=myHeader:write-attribute(name=header-value,value="JBoss-EAP")
Copy to Clipboard Toggle word wrap
reload
Copy to Clipboard Toggle word wrap

创建新过滤器

要创建新过滤器,请执行以下操作:

/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

删除过滤器

删除过滤器:

/subsystem=undertow/configuration=filter/response-header=new-response-header:remove
Copy to Clipboard Toggle word wrap
reload
Copy to Clipboard Toggle word wrap

有关可用于配置过滤器的属性的完整列表,请参阅 Undertow Subsystem Attributes 部分。

17.8.1. 配置 buffer-request 处理程序

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

可以使用 buffer-request 处理程序纠正发送标头和请求正文时造成的延迟。buffer-request 处理程序会在将其分配到 worker 线程前尝试使用来自非阻塞 IO 线程的请求。如果没有添加 buffer-request 处理程序,则直接为 worker 线程分配线程。但是,当添加 buffer-request 处理程序时,处理程序会尝试读取它在分配至 worker 线程前可以使用 IO 线程以非阻塞方式缓冲的数据量。

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

/subsystem=undertow/configuration=filter/expression-filter=buf:add(expression="buffer-request(buffers=1)")

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

可以处理的缓冲区请求的大小有限制。此限制由缓冲区大小和缓冲区总数的组合决定,如下方的公式所示。

Total_size = num_buffers ¹ buffer_size

在以上因素中:

  • Total_size 是在请求分配给 worker 线程前缓冲的数据大小。
  • num_buffers 是缓冲区的数量。缓冲区数量由处理程序上的 buffers 参数设置。
  • buffer_size 是每个缓冲区的大小。缓冲区大小在 io 子系统中设置,默认情况下为 16KB。
警告

避免配置非常大的缓冲区请求,否则您可能耗尽内存。

17.8.2. 配置 SameSite 属性

使用 SameSite 属性来定义 Cookie 的可访问性,无论是在同一站点内是否可以访问 Cookie。此属性可防止跨站点伪造攻击,因为浏览器不会向 Cookie 发送跨站点请求。

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

下表包含 SameSiteCookieHandler 参数的详情:

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

add-secure-for-none

选填

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

区分大小写

选填

这个参数表示 cookie-pattern 是否区分大小写。默认值为 true

cookie-pattern

选填

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

enable-client-checker

选填

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

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

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

模式

Mandatory(必需)

此参数指定 SameSite 属性模式,它可以设置为 StrictLaxNone

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

SameSiteCookieHandler 将属性 SameSite= &lt;specified-mode > 添加到与 cookie-pattern 匹配的 Cookie 中,或者在未指定 cookie-pattern 时添加到所有 Cookie。attribute SameSite= &lt;specified-mode&gt; 包括 user-replaced 变量,即 < specified-mode>Cookie-pattern 根据 区分大小写 中设置的值匹配

在为任何浏览器配置 SameSite 属性前,请考虑以下点:

  • 检查应用,以识别 Cookie 是否需要 SameSite 属性,以及需要保护这些 Cookie。
  • 将所有 Cookie 的 SameSite 属性模式设置为 None 会使应用更易受攻击。

使用 expression-filter 配置 SameSiteCookieHandler 的步骤

要使用 expression-filter 在服务器上配置 SameSiteCookieHandler,请执行以下步骤:

  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

通过添加配置文件来配置 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

    mode 参数的有效值为 Strict,LaxNone。使用上述命令,您还可以配置其他 SameSiteCookieHandler 参数,如 cookie-pattern区分大小写 的、enable-client-checkeradd-secure-for-none

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat