本文为SpringCloud-GateWay网关的补充内容涵盖生产环境必备配置、高频使用场景及遗漏的核心知识点与原有内容衔接流畅可直接复制粘贴至博客末尾完善整体内容体系。一、路由优先级配置order 属性当网关配置多个路由规则时会根据order属性确定路由匹配的优先级数字越小优先级越高。若未配置 order默认优先级为 0可能导致路由匹配异常比如模糊路径路由覆盖精准路径路由。核心配置示例yaml 格式与原有配置风格一致spring: cloud: gateway: routes: # 精准匹配路由优先级高order1 - id: route-user-exact uri: lb://user-service order: 1 # 数字越小优先级越高 predicates: - Path/user/exact/** # 模糊匹配路由优先级低order2 - id: route-user-all uri: lb://user-service order: 2 predicates: - Path/user/**说明当请求路径为 /user/exact/1 时会优先匹配 order1 的路由避免被模糊路由拦截这是生产环境中路由配置的基础优化点。二、高频实用过滤器生产必备原有博客已介绍自定义全局过滤器此处补充 Spring Cloud Gateway 内置的、生产中最常用的局部过滤器无需自定义直接配置即可使用覆盖路径处理、请求/响应头设置等高频场景。1. StripPrefix路径前缀剥离最常用场景当网关路由路径包含固定前缀如 /api但后端服务无需该前缀时用于剥离前缀避免后端接口路径冗余。filters: - StripPrefix1 # 剥离1层前缀例/api/user → /user补充若需剥离2层前缀如 /api/v1/user → /user配置为 StripPrefix2 即可。2. RewritePath路径重写场景需要修改请求路径的结构如替换路径中的特定片段比 StripPrefix 更灵活。filters: # 语法RewritePath原路径正则, 目标路径$1 对应正则中的分组 - RewritePath/foo/(?segment.*), /$\{segment} # 例/foo/user → /user3. AddRequestHeader/AddResponseHeader请求头/响应头添加场景统一为请求添加固定请求头如身份标识、版本信息或为响应添加统一响应头如跨域相关、日志追踪标识。filters: # 为请求添加请求头后端服务可通过 request.getHeader(X-Request-Foo) 获取 - AddRequestHeaderX-Request-Foo, Bar # 为响应添加响应头前端可通过 response.headers 获取 - AddResponseHeaderX-Response-Default, Gateway-Response4. 默认全局过滤器default-filters场景所有路由都需要生效的过滤器无需在每个路由下重复配置简化配置量。spring: cloud: gateway: # 所有路由都会生效的全局过滤器 default-filters: - AddResponseHeaderX-Gateway-Version, 2.2.9.RELEASE - StripPrefix1 # 若所有路由都需要剥离1层前缀可配置在此处三、遗漏的常用断言Predicate原有博客已覆盖 Path、Cookie 等常用断言补充 2 个生产高频断言完善断言体系。1. Query 断言请求参数匹配场景根据请求参数Query 参数匹配路由支持精确匹配和正则匹配。predicates: # 精确匹配请求必须包含 namezhangsan 的参数忽略大小写 - Queryname,zhangsan # 正则匹配请求必须包含 age 参数且值为数字\d 表示数字 - Queryage,\d说明若仅要求请求包含某个参数不限制值直接配置 - Queryname 即可。2. RemoteAddr 断言IP 白名单限制场景限制只有指定 IP 地址的请求才能访问路由用于接口安全防护如后台管理接口、敏感接口。predicates: # 允许 127.0.0.1本地和 192.168.1.0/24 网段的 IP 访问 - RemoteAddr127.0.0.1,192.168.1.0/24四、生产标配限流、熔断、跨域配置这三类配置是 Gateway 用于生产环境的核心保障缺一不可补充完整配置及使用说明贴合实战场景。1. Redis 限流生产首选场景防止恶意请求、高并发请求压垮后端服务通过 Redis 实现分布式限流单机限流可使用内置的计数器限流分布式场景优先 Redis。第一步添加 Redis 限流依赖若未添加dependency groupIdorg.springframework.cloud/groupId artifactIdspring-cloud-starter-gateway/artifactId /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-data-redis-reactive/artifactId /dependency第二步配置限流规则spring: cloud: gateway: routes: - id: limit_route uri: lb://user-service predicates: - Path/user/** filters: - name: RequestRateLimiter # 限流过滤器名称固定 args: redis-rate-limiter.replenishRate: 1 # 每秒允许通过的平均请求数令牌桶填充速率 redis-rate-limiter.burstCapacity: 5 # 令牌桶最大容量每秒最大允许通过的请求数 key-resolver: #{userKeyResolver} # 限流key生成器自定义Bean # Redis 配置根据自己的Redis环境修改 redis: host: localhost port: 6379 password: 123456 database: 0第三步自定义限流 Key 生成器Java 代码与原有自定义过滤器风格一致import org.springframework.cloud.gateway.filter.ratelimit.KeyResolver; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import reactor.core.publisher.Mono; /** * 限流Key生成器根据请求IP作为限流key可根据需求修改如根据用户ID */ Configuration public class KeyResolverConfig { Bean public KeyResolver userKeyResolver() { // 此处以请求IP作为限流key也可改为根据用户ID如从Token中解析 return exchange - Mono.just( exchange.getRequest().getRemoteAddress().getAddress().getHostAddress() ); } }说明replenishRate 和 burstCapacity 需根据后端服务承载能力调整避免限流过严或过松。2. 熔断降级Hystrix 整合场景当后端服务不可用、响应超时或报错时网关触发熔断返回自定义 fallback 页面/接口避免请求堆积提升用户体验。第一步添加 Hystrix 依赖若未添加dependency groupIdorg.springframework.cloud/groupId artifactIdspring-cloud-starter-netflix-hystrix/artifactId /dependency第二步配置熔断规则及 fallbackspring: cloud: gateway: routes: - id: hystrix_route uri: lb://order-service predicates: - Path/order/** filters: - name: Hystrix # 熔断过滤器名称固定 args: name: fallbackcmd # 熔断命令名称自定义 fallbackUri: forward:/fallback # 熔断后跳转的fallback接口第三步编写 fallback 接口Java 代码简单易用import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; /** * 熔断降级 fallback 接口 */ RestController public class FallbackController { /** * 所有路由熔断后都会跳转至此接口 * 可根据不同路由配置不同fallback接口修改fallbackUri即可 */ GetMapping(/fallback) public String fallback() { // 可返回JSON格式如 {code:503, message:服务暂时不可用请稍后再试}贴合实际接口返回规范 return 服务暂时不可用请稍后再试; } }3. 跨域配置必加解决前端跨域问题场景前端页面如 Vue、React调用网关接口时会出现跨域问题浏览器同源策略限制需配置网关跨域无需在每个后端服务单独配置。核心配置Java 代码可直接复制使用import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.reactive.CorsWebFilter; import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource; /** * 网关跨域配置全局生效 */ Configuration public class CorsConfig { Bean public CorsWebFilter corsFilter() { // 1. 配置跨域规则 CorsConfiguration config new CorsConfiguration(); config.addAllowedOrigin(*); // 允许所有来源生产环境可改为指定域名如 http://localhost:8080 config.addAllowedHeader(*); // 允许所有请求头 config.addAllowedMethod(*); // 允许所有请求方法GET、POST、PUT、DELETE等 config.setAllowCredentials(true); // 允许携带Cookie可选根据需求开启 // 2. 配置跨域规则生效的路径/** 表示所有路径 UrlBasedCorsConfigurationSource source new UrlBasedCorsConfigurationSource(); source.registerCorsConfiguration(/**, config); // 3. 返回跨域过滤器 return new CorsWebFilter(source); } }说明生产环境中建议将 addAllowedOrigin(*) 改为具体的前端域名如 http://www.xxx.com提升安全性。五、可选补充提升博客实用性的知识点以下知识点可根据博客篇幅选择补充进一步提升内容的实战性和完整性。1. Weight 权重路由灰度发布场景灰度发布、A/B测试将部分请求路由到新版本服务部分请求路由到旧版本服务。spring: cloud: gateway: routes: - id: weight_route_v1 uri: lb://user-service-v1 order: 1 predicates: - Path/user/** - Weightgroup1, 80 # 分组group1权重80% - id: weight_route_v2 uri: lb://user-service-v2 order: 1 predicates: - Path/user/** - Weightgroup1, 20 # 分组group1权重20%说明group1 为分组名称两个路由的分组必须一致权重总和建议为10080%的请求会路由到 v1 版本20%路由到 v2 版本。2. 自定义局部过滤器原有博客已介绍自定义全局过滤器补充自定义局部过滤器仅对指定路由生效完善过滤器知识点。import org.springframework.cloud.gateway.filter.GatewayFilter; import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory; import org.springframework.stereotype.Component; import reactor.core.publisher.Mono; /** * 自定义局部过滤器仅对配置了该过滤器的路由生效 */ Component public class CustomLocalFilter extends AbstractGatewayFilterFactoryCustomLocalFilter.Config { // 配置类用于接收过滤器的参数若无需参数可省略 public static class Config { private String message; public String getMessage() { return message; } public void setMessage(String message) { this.message message; } } public CustomLocalFilter() { super(Config.class); } Override public GatewayFilter apply(Config config) { return (exchange, chain) - { // 过滤器前置逻辑请求转发前执行 System.out.println(自定义局部过滤器前置 config.getMessage()); // 转发请求到下一个过滤器/后端服务 return chain.filter(exchange).then(Mono.fromRunnable(() - { // 过滤器后置逻辑响应返回后执行 System.out.println(自定义局部过滤器后置请求处理完成); })); }; } }使用方式在指定路由中配置filters: - name: CustomLocalFilter # 过滤器名称与类名一致首字母小写 args: message: 局部过滤器测试3. 超时配置避免请求长时间阻塞场景设置网关请求转发的连接超时、响应超时时间避免因后端服务卡死导致网关线程阻塞。spring: cloud: gateway: httpclient: connect-timeout: 5000 # 连接超时时间毫秒 response-timeout: 10000 # 响应超时时间毫秒 routes: - id: timeout_route uri: lb://service predicates: - Path/timeout/** metadata: response-timeout: 5000 # 单独为该路由设置响应超时优先级高于全局 connect-timeout: 3000