概述
GatewayFilter是网关中提供的一种过滤器,可以对进入网关的请求和微服务返回的响应做处理
Spring提供了31种不同的路由过滤器工厂。例如:
案例
给所有进入userservice的请求添加一个请求头:gateway=gateway is awesome!
实现方式:在gateway中修改application.yml文件,给userservice的路由添加过滤器:
server:
port: 10010
spring:
application:
name: gateway
cloud:
nacos:
server-addr: localhost:8848
gateway:
routes:
- id: user-service #路由表示,必须唯一
uri: lb://userservice # 路由的目标地址
predicates:
- Path=/user/** #路径判断,判断路径是否是以/user开头,如果是则符合
- id: order-service #路由表示,必须唯一
uri: lb://orderservice # 路由的目标地址
predicates:
- Path=/order/** #路径判断,判断路径是否是以/user开头,如果是则符合
filters:
- AddRequestHeader=gateway,gateway is awesome!
测试
在order-service的接口中测试:
@GetMapping("{orderId}")
public Order queryOrderByUserId(@PathVariable("orderId") Long orderId, @RequestHeader String gateway) {
System.out.println(gateway);
// 根据id查询订单并返回
return orderService.queryOrderById(orderId);
}
重启网关和order-service,访问该接口,可以看到控制台输出:
默认过滤器
如果要对所有的路由都生效,则可以将过滤器工厂写到default下,网关的配置如下:
server:
port: 10010
spring:
application:
name: gateway
cloud:
nacos:
server-addr: localhost:8848
gateway:
routes:
- id: user-service #路由表示,必须唯一
uri: lb://userservice # 路由的目标地址
predicates:
- Path=/user/** #路径判断,判断路径是否是以/user开头,如果是则符合
- id: order-service #路由表示,必须唯一
uri: lb://orderservice # 路由的目标地址
predicates:
- Path=/order/** #路径判断,判断路径是否是以/user开头,如果是则符合
default-filters:
- AddRequestHeader=gateway,gateway is awesome!
总结
过滤器的作用是什么?
- 对路由的请求或响应做加工处理,比如添加请求头
- 配置在路由下的过滤器只对当前路由的请求生效
defaultFilters的作用是什么?
- 对所有路由都生效的过滤器