Module bus.vortex

Class AbstractFilter

java.lang.Object
org.miaixz.bus.vortex.filter.AbstractFilter
All Implemented Interfaces:
Filter, org.springframework.web.server.WebFilter
Direct Known Subclasses:
AuthorizeFilter, CipherFilter, FormatFilter, LicenseFilter, LimitFilter, PrimaryFilter

public abstract class AbstractFilter extends Object implements Filter
抽象过滤器基类,提供公共方法和模板方法模式 所有具体过滤器继承此类,实现 doFilterInternal 方法
Since:
Java 17+
Author:
Justubborn
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    protected abstract reactor.core.publisher.Mono<Void>
    doFilter(org.springframework.web.server.ServerWebExchange exchange, org.springframework.web.server.WebFilterChain chain, Context context)
    内部过滤方法,由子类实现具体逻辑
    reactor.core.publisher.Mono<Void>
    filter(org.springframework.web.server.ServerWebExchange exchange, org.springframework.web.server.WebFilterChain chain)
    过滤器主逻辑,获取上下文并调用子类的内部过滤方法
    protected Assets
    getAssets(Context context)
    获取资产信息
    protected Context
    getContext(org.springframework.web.server.ServerWebExchange exchange)
    获取请求上下文
    getOriginalAuthority(org.springframework.http.server.reactive.ServerHttpRequest request)
    从多个渠道安全地获取请求的原始 Authority(主机+端口),专为代理环境设计。
    protected static String
    getOriginalProtocol(org.springframework.http.server.reactive.ServerHttpRequest request)
    获取请求的原始协议(http 或 https)。
    protected Map<String,String>
    获取请求参数映射
    protected org.springframework.web.server.ServerWebExchange
    setContentType(org.springframework.web.server.ServerWebExchange exchange)
    设置默认 Content-Type(如果请求头缺失)
    protected void
    validate(org.springframework.web.server.ServerWebExchange exchange)
    校验请求参数,确保必要参数存在且有效
    org.springframework.http.HttpMethod
    valueOf(int type)
    请求方式转换

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • AbstractFilter

      public AbstractFilter()
  • Method Details

    • filter

      public reactor.core.publisher.Mono<Void> filter(org.springframework.web.server.ServerWebExchange exchange, org.springframework.web.server.WebFilterChain chain)
      过滤器主逻辑,获取上下文并调用子类的内部过滤方法
      Specified by:
      filter in interface org.springframework.web.server.WebFilter
      Parameters:
      exchange - 当前的 ServerWebExchange 对象,包含请求和响应
      chain - 过滤器链,用于继续处理请求
      Returns:
      reactor.core.publisher.Mono<Void> 表示异步处理完成
    • doFilter

      protected abstract reactor.core.publisher.Mono<Void> doFilter(org.springframework.web.server.ServerWebExchange exchange, org.springframework.web.server.WebFilterChain chain, Context context)
      内部过滤方法,由子类实现具体逻辑
      Parameters:
      exchange - 当前的 ServerWebExchange 对象
      chain - 过滤器链
      context - 请求上下文
      Returns:
      reactor.core.publisher.Mono<Void> 表示异步处理完成
    • getContext

      protected Context getContext(org.springframework.web.server.ServerWebExchange exchange)
      获取请求上下文
      Parameters:
      exchange - ServerWebExchange 对象
      Returns:
      请求上下文
    • getAssets

      protected Assets getAssets(Context context)
      获取资产信息
      Parameters:
      context - 请求上下文
      Returns:
      资产信息
    • getRequestMap

      protected Map<String,String> getRequestMap(Context context)
      获取请求参数映射
      Parameters:
      context - 请求上下文
      Returns:
      请求参数映射
    • setContentType

      protected org.springframework.web.server.ServerWebExchange setContentType(org.springframework.web.server.ServerWebExchange exchange)
      设置默认 Content-Type(如果请求头缺失)
      Parameters:
      exchange - ServerWebExchange 对象
      Returns:
      更新后的 ServerWebExchange
    • getOriginalAuthority

      public static Optional<String> getOriginalAuthority(org.springframework.http.server.reactive.ServerHttpRequest request)
      从多个渠道安全地获取请求的原始 Authority(主机+端口),专为代理环境设计。

      此方法按照以下优先级顺序查找主机信息,并确保返回结果始终包含端口号:

      1. Forwarded Header (RFC 7239): 最现代、最标准的头,优先解析。
      2. X-Forwarded-Host Header: 最常见的事实标准,广泛用于各类代理。
      3. Host Header: HTTP/1.1 标准头,一个正确配置的代理应该会传递它。
      4. Request URI Host: 最后的备选方案,直接从请求URI中获取。
      如果找到的主机信息不包含端口,将根据请求协议(http/https)自动附加默认的 80/443 端口。
      Parameters:
      request - ServerHttpRequest 对象
      Returns:
      包含主机和端口的 Optional 对象。如果所有渠道都无法找到有效主机,则返回 Optional.empty()
    • getOriginalProtocol

      protected static String getOriginalProtocol(org.springframework.http.server.reactive.ServerHttpRequest request)
      获取请求的原始协议(http 或 https)。

      优先从代理头中获取,以确保在反向代理后也能得到正确的结果。 查找顺序: 'Forwarded' (proto=) -> 'X-Forwarded-Proto' -> request.getURI().getScheme()

      Parameters:
      request - ServerHttpRequest 对象
      Returns:
      协议字符串, "https" 或 "http".
    • validate

      protected void validate(org.springframework.web.server.ServerWebExchange exchange)
      校验请求参数,确保必要参数存在且有效
      Parameters:
      exchange - ServerWebExchange 对象
      Throws:
      org.miaixz.bus.core.lang.exception.ValidateException - 如果参数无效或缺失,抛出异常
    • valueOf

      public org.springframework.http.HttpMethod valueOf(int type)
      请求方式转换
      Parameters:
      type - 请求方式
      Returns:
      HttpMethod