对于最新的稳定版本,请使用 Spring Framework 6.2.0! |
过滤器
表单数据
浏览器只能通过 HTTP GET 或 HTTP POST 提交表单数据,但非浏览器客户端也可以
使用 HTTP PUT、PATCH 和 DELETE。Servlet API 要求方法仅支持 HTTP POST 的表单字段访问。ServletRequest.getParameter*()
该模块提供拦截 HTTP PUT、PATCH 和 DELETE
内容类型为 的请求,从中读取表单数据
请求的正文,并包装 以生成表单数据
可通过 Methods系列获得。spring-web
FormContentFilter
application/x-www-form-urlencoded
ServletRequest
ServletRequest.getParameter*()
请求头转发
当请求通过代理(例如负载均衡器)时,主机、端口和 方案可能会更改,这使得创建指向正确 Host、Port 和 Scheme。
RFC 7239 定义了 HTTP 标头
代理可用于提供有关原始请求的信息。还有其他
非标准标头,包括 、 和 .Forwarded
X-Forwarded-Host
X-Forwarded-Port
X-Forwarded-Proto
X-Forwarded-Ssl
X-Forwarded-Prefix
ForwardedHeaderFilter
是一个 Servlet 过滤器,它修改请求以便
a) 根据标头更改主机、端口和方案,以及 b) 删除它们
标头以消除进一步的影响。过滤器依赖于包装请求,并且
因此,它必须排在其他过滤器之前,例如 ,
应该使用修改后的请求,而不是原始请求。Forwarded
RequestContextFilter
转发的 Headers 存在安全注意事项,因为应用程序无法知道
标头是由代理按预期添加的,还是由恶意客户端添加的。这就是为什么
应将信任边界的代理配置为删除来自外部的不受信任的标头。您还可以配置 with ,在这种情况下,它会删除但不使用 Headers。Forwarded
ForwardedHeaderFilter
removeOnly=true
为了支持异步请求和错误调度,此
filter 应该与 和 映射。
如果使用 Spring Framework 的(参见 Servlet Config),则所有过滤器都会自动注册所有 dispatch
类型。但是,如果通过 注册过滤器,或者在 Spring Boot 中通过 注册过滤器,请确保除了 之外还包括 。DispatcherType.ASYNC
DispatcherType.ERROR
AbstractAnnotationConfigDispatcherServletInitializer
web.xml
FilterRegistrationBean
DispatcherType.ASYNC
DispatcherType.ERROR
DispatcherType.REQUEST
浅层 ETag
过滤器通过缓存内容来创建 “浅层” ETag
写入响应并从中计算 MD5 哈希。下次客户端发送时,
它执行相同的操作,但它还会将计算的值与请求标头进行比较,如果两者相等,则返回 304 (NOT_MODIFIED)。ShallowEtagHeaderFilter
If-None-Match
此策略可节省网络带宽,但不节省 CPU,因为必须为每个请求计算完整响应。
状态更改 HTTP 方法和其他 HTTP 条件请求标头(如 和 )不在此筛选器的范围内。控制器级别的其他策略
可以避免计算,并对 HTTP 条件请求提供更广泛的支持。
请参阅 HTTP 缓存。If-Match
If-Unmodified-Since
此过滤器具有一个参数,该参数将过滤器配置为写入弱 ETag
类似于以下内容:(如 RFC 7232 第 2.3 节中所定义)。writeWeakETag
W/"02a2d595e6ed9a0b24f027f2b63b134d6"
为了支持异步请求,必须映射此过滤器
替换为 API 的 API API 的 API 请求,以便筛选器可以延迟并成功生成
ETag 添加到最后一个异步调度的末尾。如果使用 Spring Framework 的(参见 Servlet Config)
所有过滤器都会自动为所有 Dispatch 类型注册。但是,如果注册
过滤器 via 或在 Spring Boot via 中确保包含 .DispatcherType.ASYNC
AbstractAnnotationConfigDispatcherServletInitializer
web.xml
FilterRegistrationBean
DispatcherType.ASYNC
CORS
Spring MVC 通过
控制器。但是,当与 Spring Security 一起使用时,我们建议依赖必须在 Spring Security 的过滤器链之前订购的内置功能。CorsFilter