PredicateFactory的作用是什么?
--读取用户定义的断言条件,对请求做出判断
Path=/user/**是什么含义?
--路径是以/user开头的就认为是符合的
网关路由可以配置的内容包括:
1.路由id:路由唯一标示
2.uri:路由目的地,支持lb和http两种
3.predicates:路由断言,判断请求是否符合要求,符合则转发到路由目的地
4.filters:路由过滤器,处理请求或响应
路由断言工厂Route Predicate Factory
application.yml配置文件中写的断言规则只是字符串,这些字符串会被Predicate Factory读取并处理,转变为路由判断的条件
例如Path=/user/**是按照路径匹配,这个规则是由org.springframework.cloud.gateway.handler.predicate.PathRoutePredicateFactory类来处理的
像这样的断言工厂在SpringCloudGateway还有十几个
Spring提供了11种基本的Predicate工厂:
名称 说明 示例
After 是某个时间点后的请求 - After=2037-01-20T17:42:47.789-07:00[America/Denver]
Before 是某个时间点之前的请求 - Before=2031-04-13T15:14:47.433+08:00[Asia/Shanghai]
Between 是某两个时间点之前的请求 - Between=2037-01-20T17:42:47.789-07:00[America/Denver], 2037-01-21T17:42:47.789-07:00[America/Denver]
Cookie 请求必须包含某些cookie - Cookie=chocolate, ch.p
Header 请求必须包含某些header - Header=X-Request-Id, d+
Host 请求必须是访问某个host(域名) - Host=**.somehost.org,**.anotherhost.org
Method 请求方式必须是指定方式 - Method=GET,POST
Path 请求路径必须符合指定规则 - Path=/red/{segment},/blue/**
Query 请求参数必须包含指定参数 - Query=name, Jack或者- Query=name
RemoteAddr 请求者的ip必须是指定范围 - RemoteAddr=192.168.1.1/24
application.yml配置文件:
spring:
application:
name: gateway
cloud:
nacos:
server-addr: tajia-nacos:80 # nacos地址
gateway:
routes:
- id: user-service # 路由标示,必须唯一
uri: lb://userservice # 路由的目标地址
predicates: ## 路由断言,也就是判断请求是否符合路由规则的条件
- Path=/user/** # 路径断言,判断路径是否是以/user开头,如果是则符合
- id: order-service
uri: lb://orderservice
predicates:
- Path=/order/**
- Before=2037-01-20T17:42:47.789-07:00[Asia/Shanghai]
#- After=2037-01-20T17:42:47.789-07:00[Asia/Shanghai]
default-filters:
- AddRequestHeader=Truth,Itcast is freaking awesome!