当前位置: 首页 > news >正文

SpringCloudGateway 自定义局部过滤器

场景:

将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务

 

AllToOneGatewayFilterFactory
import lombok.Getter;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.stereotype.Component;@Component
@Slf4j
public class AllToOneGatewayFilterFactory extends AbstractGatewayFilterFactory<AllToOneGatewayFilterFactory.Config> {public AllToOneGatewayFilterFactory() {super(Config.class);}@Overridepublic GatewayFilter apply(Config config) {return (exchange, chain) -> {ServerHttpRequest request = exchange.getRequest();request.getURI();// 替换路径String path = request.getPath().toString();ServerHttpRequest modifiedRequest = request.mutate().header(config.headerName, path).path(config.getToPath()).build();exchange = exchange.mutate().request(modifiedRequest).build();log.info("AllToOne: headers{{}:{}}, {} ---> {}", config.getHeaderName(),path, request.getURI(), modifiedRequest.getURI());return chain.filter(exchange);};}@Setter@Getterpublic static class Config {private String headerName;private String toPath;}
}

 

 spring:cloud:gateway:httpclient:ssl:useInsecureTrustManager: trueroutes:- id: AllToOne_fnpturi: http://localhost:19982predicates:- Path=/**filters:- name: AllToOneargs:headerName: api-pathtoPath: /api/unified

注意:1.类名必须以GatewayFilterFactory结尾否则会出现不识别 的情况

           2.配置的filters -name 的值为类的前缀(截取GatewayFilterFactory之后的)

http://www.xdnf.cn/news/945469.html

相关文章:

  • WEB3全栈开发——面试专业技能点P8DevOps / 区块链部署
  • Conda 创建新环境时报错 HTTP 502,如何解决?
  • 【Zephyr 系列 16】构建 BLE + LoRa 协同通信系统:网关转发与混合调度实战
  • 【前端实战】如何让用户回到上次阅读的位置?
  • 板凳-------Mysql cookbook学习 (十--3)
  • Tomcat Jetty 和 UnderTow 的粗略对比
  • 企业级AI-DevOps工具链的构成及实现方案
  • 借助 LangGraph 对 Agent 进行测试
  • Redis实战-黑马点评项目完结(p78-p95)
  • 解决网页导出PDF部分内容被遮挡问题
  • 性能优化中,多面体模型基本原理
  • 使用centos服务器和Let‘s Encypted配置SpingBoot项目的https证书
  • JVM如何优化
  • 深度解析 Linux 内核参数 net.ipv4.tcp_rmem:优化网络性能的关键
  • DeFi模式:去中心化金融架构与流动性池设计
  • Dify 社区版本地docker compose部署记录
  • Docker环境下安装 Elasticsearch + IK 分词器 + Pinyin插件 + Kibana(适配7.10.1)
  • uni-app学习笔记三十五--扩展组件的安装和使用
  • A2A JS SDK 完整教程:快速入门指南
  • Linux线程互斥与竞态条件解析
  • LeetCode Hot100刷题——三数之和
  • 2025企业级采购系统深度评测:AI技术如何助力采购成本直降40%?
  • Python训练营-Day26-函数专题1:函数定义与参数
  • 从实验室到产业:IndexTTS 在六大核心场景的落地实践
  • 影子栈指针是什么?
  • 原型模式深度解析:Java设计模式实战指南与克隆机制优化实践
  • 一种使用 PowerToys 的键盘管理器工具重新映射按键实现在 Windows 上快捷输入字符的方式
  • 在Spring Boot中集成RabbitMQ的完整指南
  • vue3+vite+pnpm项目 使用monaco-editor常见问题
  • 数据结构篇--分离链表vs线性探测