判断请求Header是否具有给定名称且值与正则表达式匹配。例如:
-Header=X-Request-Id, \d+
基于Method请求方法的断言工厂,
MethodRoutePredicateFactory接收一个参数,判断请求类型是否跟指定的类型匹配。例如:
-Method=GET
基于Query请求参数的断言工厂,QueryRoutePredicateFactory :
接收两个参数,请求param和正则表达式, 判断请求参数是否具 有给定名称且值与正则表达式匹配。例如:
-Query=pageSize,\d+
内置的路由断言工厂应用案例,例如:
server:
port: 9000
spring:
application:
name: sca-gateway
cloud:
nacos:
server-addr: localhost:8848
gateway:
discovery:
locator:
enabled: true #开启通过服务中心的serviceId 创建路由的功能
routes:
- id: bd-id
##uri: http://localhost:8081/
uri: lb://sca-provider
predicates: ###匹配规则
-
Path=/nacos/provider/echo/**
-
Before=2021-01-30T00:00:00.000+08:00
-
Method=GET
filters:
- StripPrefix=1 # 转发之前去掉1层路径
说明:当条件不满足时,则无法进行路由转发,会出现404异常。
-
何为谓词?(网关中封装了判断逻辑的一个对象)
-
谓词逻辑的设计是怎样的?(谓词判断逻辑返回值为true则进行请求转发)
-
你了解哪些谓词逻辑?(path,请求参数,请求方式,请求头,….)
-
我们可以自己定义谓词工厂对象吗?(可以的)
=============================================================================
过滤器(Filter)就是在请求传递过程中,对请求和响应做一个处理。Gateway 的Filter从作用范围可分为两种:GatewayFilter与GlobalFilter。其中:
-
GatewayFilter:应用到单个路由或者一个分组的路由上。
-
GlobalFilter:应用到所有的路由上(例如负载均衡过滤器,请求转发过滤器等)。
在SpringCloud Gateway中内置了很多不同类型的网关路由过滤器。具体如下:
案例分析:
基于AddR