Spring Cloud Gateway 路由谓词工厂、过滤器工厂详解
路由谓词工厂(Route Predicate Factories)、过滤器工厂(GatewayFilter Factories)详解
如果包含启动器,但不希望启用网关,请设置 spring.cloud.gateway.enabled=false
基本概念
- Route:网关的基本构件。 它由一个ID、一个目标URI、一个谓词集合和一个过滤器集合定义。 如果聚合谓词为真,则匹配路由。
- Predicate:这是一个Java 8函数谓词。 输入类型是
Spring Framework ServerWebExchange
。 这允许您匹配来自HTTP请求的任何内容,例如头信息或参数。 - Filter:这些是用特定工厂构造的
GatewayFilter
实例。 在这里,您可以在发送下游请求之前或之后修改请求和响应。
工作流程
下图提供了 Spring Cloud Gateway 如何工作的高级概述:
客户端向Spring Cloud Gateway发出请求。 如果网关处理程序映射确定一个请求匹配一个路由,它将被发送到网关Web处理程序。 此处理程序通过特定于请求的过滤器链运行请求。 虚线分隔过滤器的原因是,过滤器可以在发送代理请求之前和之后运行逻辑。 执行所有“预”筛选逻辑。 然后发出代理请求。 发出代理请求后,运行“post”筛选器逻辑。
Route Predicate Factories
Spring Cloud Gateway匹配路由,作为 Spring WebFlux HandlerMapping
基础设施的一部分。 Spring Cloud Gateway包括许多内置的路由谓词工厂。 所有这些谓词都匹配HTTP请求的不同属性。 您可以将多个路由谓词工厂与逻辑和语句组合在一起。
谓词工厂
Spring Cloud Gateway提供了十种路由谓词工厂。为网关实现灵活的转发提供了基石。
simple explain:Route Predicate Factories
After、Before、Between、Cookie、Header、Host、Method、Path、Query、RemoteAddr。
GatewayFilter Factories
路由过滤器允许以某种方式修改传入的HTTP请求或传出的HTTP响应。 路由过滤器的作用域是特定的路由。 Spring Cloud Gateway包括许多内置的GatewayFilter factory。
有关如何使用以下任何过滤器的更详细示例,请查看单元测试。simple explain:GatewayFilter Factories
- AddRequestHeader GatewayFilter Factory
- AddRequestParameter GatewayFilter Factory
- AddResponseHeader GatewayFilter Factory
- DedupeResponseHeader GatewayFilter Factory
- Spring Cloud CircuitBreaker GatewayFilter Factory !
- FallbackHeaders GatewayFilter Factory !
- MapRequestHeader GatewayFilter factory
- PrefixPath GatewayFilter Factory
- PreserveHostHeader GatewayFilter Factory !
- RequestRateLimiter GatewayFilter Factory !
- RedirectTo GatewayFilter Factory
- RemoveRequestHeader GatewayFilter Factory
- RemoveResponseHeader GatewayFilter Factory
- RewritePath GatewayFilter Factory !
- RewriteLocationResponseHeader GatewayFilter Factory !
- RewriteResponseHeader GatewayFilter Factory !
- Savesession GatewayFilter Factory !
- SecureHeaders GatewayFilter Factory !
- SetPath GatewayFilter Factory
- SetRequestHeader GatewayFilter Factory
- SetResponseHeader GatewayFilter Factory
- SetStatus GatewayFilter Factory
- StripPrefix GatewayFilter Factory
- Retry GatewayFilter Factory !
- RequestSize GatewayFilter Factory
- SetRequestHostHeader GatewayFilter Factory !
- Modify Request Body GatewayFilter Factory
- Modify Response Body GatewayFilter Factory
- TokenRelay GatewayFilter Factory !
- Default Filters