17.8. 配置过滤器
过滤器允许修改请求的某些方面,并且可以使用 predicates 来控制过滤器的执行时间。过滤器的一些常见用例包括设置标头或执行 GZIP 压缩。
过滤器在功能上等同于 JBoss EAP 6 中使用的全局值。
可以定义以下类型的过滤器:
- custom-filter
- error-page
- expression-filter
- gzip
- mod-cluster
- request-limit
- response-header
- rewrite
以下示例演示了如何使用管理 CLI 配置过滤器。您还可以通过导航到 Configuration
更新现有过滤器
更新现有过滤器:
/subsystem=undertow/configuration=filter/response-header=myHeader:write-attribute(name=header-value,value="JBoss-EAP")
/subsystem=undertow/configuration=filter/response-header=myHeader:write-attribute(name=header-value,value="JBoss-EAP")
reload
reload
创建新过滤器
要创建新过滤器,请执行以下操作:
/subsystem=undertow/configuration=filter/response-header=new-response-header:add(header-name=new-response-header,header-value="My Value")
/subsystem=undertow/configuration=filter/response-header=new-response-header:add(header-name=new-response-header,header-value="My Value")
删除过滤器
删除过滤器:
/subsystem=undertow/configuration=filter/response-header=new-response-header:remove
/subsystem=undertow/configuration=filter/response-header=new-response-header:remove
reload
reload
有关可用于配置过滤器的属性的完整列表,请参阅 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
/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
可以处理的缓冲区请求的大小有限制。此限制由缓冲区大小和缓冲区总数的组合决定,如下方的公式所示。
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 子系统中的 为 Cookie 配置 SameSite 属性。使用这个配置,您不需要更改应用程序代码。
SameSite CookieHandler
下表包含 SameSiteCookieHandler 参数的详情:
| 参数名称 | 存在 | 描述 |
|---|---|---|
|
| 选填 |
当 |
|
| 选填 |
这个参数表示 |
|
| 选填 |
此参数接受 Cookie 名称的正则表达式模式。如果没有指定此参数,则属性 |
|
| 选填 |
此参数验证客户端应用程序是否与
如果您使用此默认值,并将
为防止不兼容的客户端出现问题,此参数跳过将 |
|
| Mandatory(必需) |
此参数指定
为提高针对跨站点请求伪造攻击的安全性,一些浏览器会将默认的 |
SameSiteCookieHandler 将属性 SameSite= <specified-mode > 添加到与 cookie-pattern 匹配的 Cookie 中,或者在未指定 cookie-pattern 时添加到所有 Cookie。attribute SameSite= <specified-mode> 包括 user-replaced 变量,即 < specified-mode>。Cookie-pattern 根据 区分大小写 中设置的值匹配。
在为任何浏览器配置 SameSite 属性前,请考虑以下点:
-
检查应用,以识别 Cookie 是否需要
SameSite属性,以及需要保护这些 Cookie。 -
将所有 Cookie 的
SameSite属性模式设置为None会使应用更易受攻击。
使用 expression-filter 配置 SameSiteCookieHandler 的步骤
要使用 expression-filter 在服务器上配置 SameSiteCookieHandler,请执行以下步骤:
使用以下命令,使用
SameSiteCookieHandler创建一个新的expression-filter:/subsystem=undertow/configuration=filter/expression-filter=addSameSiteLax:add(expression="path-prefix('/mypathprefix') -> samesite-cookie(Lax)")/subsystem=undertow/configuration=filter/expression-filter=addSameSiteLax:add(expression="path-prefix('/mypathprefix') -> samesite-cookie(Lax)")Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下命令,在
undertowweb 服务器中启用expression-filter:/subsystem=undertow/server=default-server/host=default-host/filter-ref=addSameSiteLax:add
/subsystem=undertow/server=default-server/host=default-host/filter-ref=addSameSiteLax:addCopy to Clipboard Copied! Toggle word wrap Toggle overflow
通过添加配置文件来配置 SameSiteCookieHandler 的步骤
要通过添加 undertow-handlers.conf 文件在应用程序中配置 SameSiteCookieHandler,请执行以下步骤:
-
将
undertow-handlers.conf文件添加到您的 WAR 的 WEB-INF 目录中。 在
undertow-handlers.conf文件中,使用特定的SameSiteCookieHandler参数添加以下内容:samesite-cookie(mode=<mode>)
samesite-cookie(mode=<mode>)Copy to Clipboard Copied! Toggle word wrap Toggle overflow mode参数的有效值为Strict,Lax或None。使用上述命令,您还可以配置其他SameSiteCookieHandler参数,如cookie-pattern、区分大小写的、enable-client-checker或add-secure-for-none。