获取本次请求命中的路由id

Route route = exchange.getAttribute(ServerWebExchangeUtils.GATEWAY_ROUTE_ATTR);

route.getId()

全局过滤器GlobalFilter

通过实现Ordered接口 ,每个过滤器必须指定一个int类型order值,值越小,优先级越高,执行顺序越靠前。

@Override

public int getOrder() {

return Ordered.HIGHEST_PRECEDENCE;

}

路由过滤器

 等待

默认过滤器

spring:

cloud:

gateway:

routes:

- id: user-service

uri: lb://userservice

predicates:

- Path=/user/**

default-filters: # 默认过滤器配置

- AddRequestHeader=token, test # 添加请求头

配置与routes平级,会对所有路由生效。 

网关作用

反向代理(请求的转发)、路由和负载均衡、身份认证和权限控制、对请求的限流

GateWay路由配置

spring:

cloud:

gateway:

routes: # 网关路由配置

- id: user-service # 路由id,自定义,只要唯一即可

# uri: http://127.0.0.1:8081 # 路由的目标地址 (直接写死地址的方式,不推荐)

uri: lb://userservice # 路由的目标地址 lb是负载均衡,后面跟服务名称(推荐)

predicates: # 路由断言,判断请求是否符合路由规则的条件

- Path=/user/** # 按照路径匹配,以/user/开头的请求就符合要求

filters:

- StripPrefix=1

1、路由id(id) 当前路由的唯一标识

2、路由目标(uri)

路由的目标地址,http代表固定地址,lb代表根据服务名称负载均衡。

3、路由断言(predicates)  

判断路由的规则;被Predicate Factory读取并处理。

例如Path=/user/**是按照路径匹配,这个规则是由org.springframework.cloud.gateway.handler.predicate.PathRoutePredicateFactory类来处理。

断言工厂:

名称说明示例After是某个时间点后的请求- After=2022-01-20T14:32:27.789-07:00[Asia/Shanghai]Before是某个时间点之前的请求- Before=2022-04-13T15:14:47.433+08:00[Asia/Shanghai]Between是某两个时间点之前的请求- Between=2021-01-20T17:42:47.789-07:00[Asia/Shanghai], 2023-01-21T17:42:47.789-07:00[Asia/Shanghai]Cookie请求必须包含某些cookie- Cookie=chocolateHeader请求必须包含某些header- Header=asd, casHost请求必须是访问某个host(域名)- Host=baidu.com, jd.comMethod请求方式必须是指定方式- Method=GET,POSTPath请求路径必须符合指定规则- Path=/user/{params},/card/**Query请求参数必须包含指定参数- Query=name, JackRemoteAddr请求者的ip必须是指定范围- RemoteAddr=192.168.1.1/24Weight权重处理

- Path=/card/** 代表以card开头的多级路径请求 ,多级和一级请求都会生效

- Path=/card/*  代表以card开头的一级路径请求 ,只有一级请求会生效

4、路由过滤器filters

请求顺序

 过滤器执行顺序

默认过滤器-当前路由过滤器-用户自定义的全局过滤器

RouterFunction

网关里的接口 

推荐链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: