15.5. 配置过滤器
过滤器允许修改请求的某些方面,并可使用 predicates 来控制过滤器执行的时间。过滤器的一些常见用例包括设置标头或执行 GZIP 压缩。
过滤器的功能等同于 JBoss EAP 6 中使用的全局 valve。
可以定义以下类型的过滤器:
- custom-filter
- error-page
- expression-filter
- gzip
- mod-cluster
- request-limit
- response-header
- rewrite
15.5.1. 使用管理 CLI 和管理控制台管理文件处理程序 复制链接链接已复制到粘贴板!
此流程解释了如何使用管理 CLI 和管理控制台管理 Undertow 子系统中的过滤器。您可以根据需要更新现有过滤器、创建新过滤器或删除过滤器。
先决条件
- 您可以访问管理 CLI。
- 您可以访问管理控制台。
- 有修改服务器配置的权限。
使用管理控制台管理文件处理程序
您可以使用管理控制台配置过滤器,方法是导航到 Configuration
使用管理 CLI 管理文件处理程序
以下流程演示了如何使用管理 CLI 配置过滤器
流程
更新现有过滤器
- 连接到管理 CLI。
运行以下命令以更新过滤器的属性:
---- /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") ----Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重新载入服务器以应用更改:
---- reload ----
---- reload ----Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建新过滤器
- 连接到管理 CLI。
运行以下命令以创建新过滤器:
---- /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") ----Copy to Clipboard Copied! Toggle word wrap Toggle overflow
删除过滤器
- 连接到管理 CLI。
运行以下命令以删除过滤器:
---- /subsystem=undertow/configuration=filter/response-header=new-response-header:remove ----
---- /subsystem=undertow/configuration=filter/response-header=new-response-header:remove ----Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重新载入服务器以应用更改:
---- reload ----
---- reload ----Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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。
- 有修改服务器配置的权限。
流程
运行以下命令来添加
buffer-request处理程序:---- /subsystem=undertow/configuration=filter/expression-filter=buf:add(expression="buffer-request(buffers=1)") ----
---- /subsystem=undertow/configuration=filter/expression-filter=buf:add(expression="buffer-request(buffers=1)") ----Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,将处理程序附加到您的服务器和主机:
---- /subsystem=undertow/server=default-server/host=default-host/filter-ref=buf:add ----
---- /subsystem=undertow/server=default-server/host=default-host/filter-ref=buf:add ----Copy to Clipboard Copied! Toggle word wrap Toggle overflow 计算缓冲区请求大小:
`Total_size = num_buffers {MultiplicationSign} buffer_size``Total_size = num_buffers {MultiplicationSign} buffer_size`Copy to Clipboard Copied! Toggle word wrap Toggle overflow Where:
Where:Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
total_size是在请求分配给 worker 线程前缓冲的数据大小。 -
num_是缓冲区数量,由处理程序上的 buffer 参数设置(在本示例中,它被设置为buffers1)。 buffer_size是每个缓冲区的大小,在io子系统中设置(每个请求默认为 16KB)。警告避免配置非常大的缓冲区请求,或者您可能内存不足。
-
重新载入服务器以应用更改:
---- reload ----
---- reload ----Copy to Clipboard Copied! Toggle word wrap Toggle overflow
15.5.1.2. 了解 SameSite 属性 复制链接链接已复制到粘贴板!
使用 SameSite 属性在同一站点内定义 Cookie 的可访问性。此属性有助于防止跨站点请求伪造攻击,因为浏览器不会通过跨站点请求发送 Cookie。
您可以使用 undertow 子系统中的 为 Cookie 配置 SameSite 属性。使用这个配置,您不需要更改应用程序代码。
SameSite CookieHandler
15.5.1.3. SameSiteCookieHandler parameters 复制链接链接已复制到粘贴板!
下表详细介绍了 SameSiteCookieHandler 的参数:
| 参数名称 | 存在 | 描述 |
|---|---|---|
|
| 选填 |
当 |
|
| 选填 |
指明 |
|
| 选填 |
接受 Cookie 名称的正则表达式模式。如果没有指定,则属性 |
|
| 选填 |
验证客户端应用程序是否与
如果您使用此默认值,并将
为了防止与不兼容的客户端出现问题,此参数跳过将 |
|
| 必需 |
指定
为了提高安全性,为了防止跨站点请求伪造攻击,一些浏览器将默认的 |
SameSiteCookieHandler 将属性 SameSite=<specified-mode > 添加到 Cookie,在未指定 匹配。cookie-pattern 时与 Cookie-patterncookie-pattern 根据在 区分大小写 时设置的值匹配。
在配置 SameSite 属性前,请考虑以下点:
-
检查您的应用,以识别 Cookie 是否需要
SameSite属性,以及是否需要保护这些 Cookie。 -
对于所有 Cookie,将
SameSite属性模式设置为None可能会导致应用程序更易受攻击。
15.5.1.4. 使用表达式过滤器配置 SameSiteCookieHandler 复制链接链接已复制到粘贴板!
此流程解释了如何使用 expression-filter 在服务器中配置 SameSiteCookieHandler。
先决条件
- 您可以访问管理 CLI。
- 有修改服务器配置的权限。
流程
使用
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:add ----Copy to Clipboard Copied! Toggle word wrap Toggle overflow
15.5.1.5. 使用配置文件配置 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 Replace `<mode>` with one of the valid values: `Strict`, `Lax`, or `None`.
Replace `<mode>` with one of the valid values: `Strict`, `Lax`, or `None`.Copy to Clipboard Copied! Toggle word wrap Toggle overflow You can also configure other `SameSiteCookieHandler` parameters, such as `cookie-pattern`, `case-sensitive`, `enable-client-checker`, or `add-secure-for-none`.
You can also configure other `SameSiteCookieHandler` parameters, such as `cookie-pattern`, `case-sensitive`, `enable-client-checker`, or `add-secure-for-none`.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存文件并重新部署应用程序(如有必要)。