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
抽象过滤器基类,提供公共方法和模板方法模式 所有具体过滤器继承此类,实现 doFilterInternal 方法
- Since:
- Java 17+
- Author:
- Justubborn
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected 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获取资产信息protected ContextgetContext(org.springframework.web.server.ServerWebExchange exchange) 获取请求上下文getOriginalAuthority(org.springframework.http.server.reactive.ServerHttpRequest request) 从多个渠道安全地获取请求的原始 Authority(主机+端口),专为代理环境设计。protected static StringgetOriginalProtocol(org.springframework.http.server.reactive.ServerHttpRequest request) 获取请求的原始协议(http 或 https)。getRequestMap(Context context) 获取请求参数映射protected org.springframework.web.server.ServerWebExchangesetContentType(org.springframework.web.server.ServerWebExchange exchange) 设置默认 Content-Type(如果请求头缺失)protected voidvalidate(org.springframework.web.server.ServerWebExchange exchange) 校验请求参数,确保必要参数存在且有效org.springframework.http.HttpMethodvalueOf(int type) 请求方式转换
-
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:
filterin interfaceorg.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
获取请求上下文- Parameters:
exchange- ServerWebExchange 对象- Returns:
- 请求上下文
-
getAssets
获取资产信息- Parameters:
context- 请求上下文- Returns:
- 资产信息
-
getRequestMap
获取请求参数映射- 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(主机+端口),专为代理环境设计。此方法按照以下优先级顺序查找主机信息,并确保返回结果始终包含端口号:
- Forwarded Header (RFC 7239): 最现代、最标准的头,优先解析。
- X-Forwarded-Host Header: 最常见的事实标准,广泛用于各类代理。
- Host Header: HTTP/1.1 标准头,一个正确配置的代理应该会传递它。
- Request URI Host: 最后的备选方案,直接从请求URI中获取。
- 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
-