Module bus.vortex

Class PrimaryFilter

java.lang.Object
org.miaixz.bus.vortex.filter.AbstractFilter
org.miaixz.bus.vortex.filter.PrimaryFilter
All Implemented Interfaces:
Filter, org.springframework.web.server.WebFilter

@Order(-2147483648) public class PrimaryFilter extends AbstractFilter
核心前置过滤器,作为请求处理链的入口,负责初步的安全校验、参数解析和上下文初始化。

此过滤器具有最高的执行优先级 (Ordered.HIGHEST_PRECEDENCE),确保在其他过滤器之前运行。 主要职责包括:

  • 安全拦截: 拦截针对如 /favicon.ico 等常见无效路径的请求,并防御路径遍历攻击。
  • 请求分发: 根据请求的 HTTP 方法 (GET) 和 Content-Type (JSON, form-data, urlencoded) 将请求分发给相应的处理器。
  • 参数解析: 从 URL 查询字符串或请求体中异步解析参数,并统一存入 Context 对象中,供后续过滤器和业务逻辑使用。
  • 请求体复用: 对于POST等包含请求体的请求,在读取后会通过 ServerHttpRequestDecorator 将请求体重新包装,以确保下游组件可以再次读取。
  • 自动重试: 内置了对请求体解析的重试机制,以增强系统在处理网络波动时的健壮性。
Since:
Java 17+
Author:
Justubborn
  • Constructor Details

    • PrimaryFilter

      public PrimaryFilter()
  • Method Details

    • doFilter

      protected reactor.core.publisher.Mono<Void> doFilter(org.springframework.web.server.ServerWebExchange exchange, org.springframework.web.server.WebFilterChain chain, Context context)
      过滤器的核心执行方法,负责对请求进行初步安全检查和分发处理。

      该方法首先执行路径安全检查,包括黑名单路径过滤和路径遍历攻击检测。 检查通过后,根据请求类型(GET 或其他方法及 Content-Type)将 ServerWebExchange 传递给相应的处理方法 (handleGetRequest, handleJsonRequest 等)。

      Specified by:
      doFilter in class AbstractFilter
      Parameters:
      exchange - 当前的 ServerWebExchange 对象
      chain - 过滤器链
      context - 用于在整个请求生命周期内传递数据的上下文对象
      Returns:
      reactor.core.publisher.Mono<Void> 表示异步过滤操作的完成
      Throws:
      org.miaixz.bus.core.lang.exception.ValidateException - 如果请求路径被阻止或检测到路径遍历攻击