SpringCloud Webflux 过滤器增加header 传递

webflux 使用异步非阻塞的方式,传递Header还需要我们自己增加代码传递:

定义过滤器,便携下面的配置可以尝试一下header的传递到后面的服务中。

@Component
public class AuthorizationFilter implements WebFilter {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
        ServerHttpRequest mutatedRequest = exchange.getRequest().mutate().header(HttpHeaders.AUTHORIZATION, "Bearer " + authHeader).build();
        ServerWebExchange mutatedExchange = exchange.mutate().request(mutatedRequest).build();
        return chain.filter(mutatedExchange);
    }
}


## Kotlin 的方式
@Component
class AuthorizationFilter : WebFilter {
    override fun filter(exchange: ServerWebExchange, chain: WebFilterChain): Mono<Void> {
        val mutatedRequest = exchange.request.mutate().header(HttpHeaders.AUTHORIZATION, "Bearer $authHeader").build()
        val mutatedExchange = exchange.mutate().request(mutatedRequest).build()
        return chain.filter(mutatedExchange)
    }
}

### Spring Cloud Gateway 过滤器概述 Spring Cloud Gateway 提供了两种主要类型的过滤器:`GatewayFilter` 和 `GlobalFilter`[^2]。这些过滤器能够修改传入的 HTTP 请求或传出的 HTTP 响应,适用于处理跨应用需求,如安全性、超时控制等。 #### GatewayFilter 的配置与使用 对于仅需应用于特定路由的过滤器,可以通过 `spring.cloud.gateway.routes.filters` 或者 `spring.cloud.default-filters` 来定义具体的 `GatewayFilter` 实例。下面是一个简单的例子展示如何在一个指定路由中添加一个重写路径的过滤器: ```yaml spring: cloud: gateway: routes: - id: rewrite_path_route uri: http://example.org predicates: - Path=/foo/** filters: - RewritePath=/foo/(?<segment>.*), /$\{segment} ``` 这段 YAML 配置会匹配 `/foo/` 开头的所有 URL 并将其转换为目标服务器上的根目录下的相应资源位置[^1]。 #### GlobalFilter 的配置与使用 不同于 `GatewayFilter`, `GlobalFilter` 不需要显式地在配置文件里声明即可自动生效于每一个路由之上。这类过滤器通常用于实现通用逻辑,例如身份验证检查或是日志记录等功能。为了创建自定义全局过滤器,开发者应该继承抽象类 `AbstractGatewayFilterFactory<T>` 或者直接实现接口 `GlobalFilter` 接口并注册为 Bean: ```java @Component public class CustomGlobalFilter implements GlobalFilter { @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { // 自定义逻辑... return chain.filter(exchange); } } ``` 此 Java 类实现了 `GlobalFilter` 接口的方法,在这里可以根据实际应用场景加入必要的预处理操作;之后调用 `chain.filter()` 方法继续传递请求给下一个处理器。 #### 内置过滤器工厂及其分类 框架自带了一系列实用工具——即所谓的 "过滤器工厂", 它们简化了许多常见的任务,比如设置响应头信息(`AddResponseHeader`)、调整查询参数 (`RequestRateLimiter`) 等等。总共提供了多达二十多种不同功能的内置网关过滤器工厂,涵盖了 Header、Parameter、Path、Body、Status、Session、Redirect、Retry、Rate Limiter 和 Hystrix 几大类别[^3]。 #### 查看过滤器链执行顺序 如果想要确认各个过滤器之间的相对次序关系,则可以在应用程序启动后利用调试模式跟踪 `org.springframework.cloud.gateway.handler.FilteringWebHandler#handle` 中维护着完整的组合列表 `combinedFiltersOrder` ,这有助于理解整个流程是如何运作起来的[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

低头确望水中月亮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值