配置方式实现SpringCloudGateway相关功能
- Spring Cloud Gateway 核心功能与实战实现指南
 - 一、核心功能架构
 - 二、六大核心功能实现
 - 1. 动态路由配置
 - 2. 断言(Predicate)配置
 - 3. 过滤器(Filter)配置
 - 4. 负载均衡配置
 - 5. 熔断降级配置
 - 6. 限流配置
 
- 三、高级配置技巧
 - 1. 跨域配置
 - 2. 重试机制
 - 3. 请求/响应修改
 
- 四、监控与调试
 - 1. Actuator端点配置
 - 2. 日志记录配置
 
- 五、安全最佳实践
 - 1. JWT验证过滤器
 - 2. 敏感头过滤
 
- 关联知识
 
Spring Cloud Gateway 核心功能与实战实现指南
一、核心功能架构
二、六大核心功能实现
1. 动态路由配置
application.yml 配置示例:
spring:cloud:gateway:routes:▪ id: user-serviceuri: lb://user-service  # 服务注册中心名称predicates:▪ Path=/api/users/**filters:▪ StripPrefix=1  # 去掉/api前缀 
代码增强(Java DSL方式):
@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {return builder.routes().route("auth-service", r -> r.path("/auth/**").filters(f -> f.rewritePath("/auth/(?<segment>.*)", "/${segment}")).uri("lb://auth-service")).build();
}
 
2. 断言(Predicate)配置
常用断言类型:
routes:• id: time-routeuri: http://example.orgpredicates:◦ After=2023-01-20T17:42:47.789-07:00[America/Denver]  # 时间断言◦ Header=X-Request-Id, \d+  # 请求头正则匹配◦ Method=GET,POST  # HTTP方法◦ Query=name, .+  # 查询参数 
自定义断言实现:
public class CustomPredicate implements RoutePredicateFactory<Config> {@Overridepublic Predicate<ServerWebExchange> apply(Config config) {return exchange -> {// 实现自定义逻辑return exchange.getRequest().getHeaders().containsKey("X-Special");};}
}
 
3. 过滤器(Filter)配置
内置过滤器示例:
filters:• AddRequestHeader=X-Request-color, blue  # 添加请求头• AddResponseHeader=X-Response-Rate, 1000  # 添加响应头• Retry=3  # 重试机制• CircuitBreaker=myCircuitBreaker  # 熔断器 
自定义全局过滤器:
@Component
public class AuthFilter implements GlobalFilter, Ordered {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {String token = exchange.getRequest().getHeaders().getFirst("Authorization");if(!validateToken(token)){exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);return exchange.getResponse().setComplete();}return chain.filter(exchange);}@Overridepublic int getOrder() {return -1;  // 执行顺序}
}
 
4. 负载均衡配置
自动集成负载均衡:
spring:cloud:loadbalancer:ribbon:enabled: truegateway:routes:▪ id: product-serviceuri: lb://product-service  # lb://表示启用负载均衡predicates:▪ Path=/products/** 
5. 熔断降级配置
Resilience4J熔断配置:
spring:cloud:gateway:routes:▪ id: inventory-serviceuri: lb://inventory-servicepredicates:▪ Path=/inventory/**filters:▪ name: CircuitBreakerargs:name: inventoryCBfallbackUri: forward:/fallback/inventorystatusCodes: 500,503
 
Fallback控制器:
@RestController
public class FallbackController {@GetMapping("/fallback/inventory")public Mono<Map<String, Object>> inventoryFallback() {return Mono.just(Map.of("status", 503,"message", "服务暂时不可用","timestamp", Instant.now()));}
}
 
6. 限流配置
Redis令牌桶限流:
spring:redis:host: localhostcloud:gateway:routes:▪ id: order-serviceuri: lb://order-servicepredicates:▪ Path=/orders/**filters:▪ name: RequestRateLimiterargs:redis-rate-limiter.replenishRate: 10  # 每秒10个令牌redis-rate-limiter.burstCapacity: 20  # 桶容量key-resolver: "#{@userKeyResolver}"  # SpEL表达式
 
Key解析器实现:
@Bean
KeyResolver userKeyResolver() {return exchange -> Mono.just(exchange.getRequest().getQueryParams().getFirst("userId"));
}
 
三、高级配置技巧
1. 跨域配置
spring:cloud:gateway:globalcors:cors-configurations:'[/**]':allowedOrigins: "*"allowedMethods:▪ GET▪ POST▪ PUTallowedHeaders:▪ Content-Type 
2. 重试机制
filters:• name: Retryargs:retries: 3statuses: BAD_GATEWAY,INTERNAL_SERVER_ERRORmethods: GET,POSTbackoff:firstBackoff: 10msmaxBackoff: 100msfactor: 2
 
3. 请求/响应修改
filters:• RewritePath=/api/v1/(?<segment>.*), /$\{segment}  # 路径重写• SetRequestHeader=X-Request-From, Gateway  # 设置请求头• RemoveResponseHeader=Server  # 移除响应头 
四、监控与调试
1. Actuator端点配置
management:endpoints:web:exposure:include: gatewayendpoint:gateway:enabled: true
 
访问端点:
/actuator/gateway/routes- 查看所有路由/actuator/gateway/globalfilters- 查看全局过滤器/actuator/gateway/routefilters- 查看路由过滤器
2. 日志记录配置
logging:level:org.springframework.cloud.gateway: DEBUGreactor.netty.http.client: DEBUG
 
五、安全最佳实践
1. JWT验证过滤器
public class JwtFilter implements GlobalFilter {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {String token = exchange.getRequest().getHeaders().getFirst("Authorization");if (token != null && JwtUtil.validateToken(token)) {String username = JwtUtil.getUsernameFromToken(token);exchange.getRequest().mutate().header("X-User-Name", username).build();return chain.filter(exchange);}exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);return exchange.getResponse().setComplete();}
}
 
2. 敏感头过滤
spring:cloud:gateway:default-filters:▪ RemoveRequestHeader=Cookie,Set-Cookie  # 禁止传递Cookie 
通过以上配置和代码示例,您可以快速搭建具备完整功能的API网关。建议根据实际业务需求组合不同的路由策略和过滤器链。
关联知识
【Spring知识】Spring cloud gateway使用详解