SpringCloud 统一网关Gateway -- 路由的过滤器配置默认过滤器
Posted CodeJiao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringCloud 统一网关Gateway -- 路由的过滤器配置默认过滤器相关的知识,希望对你有一定的参考价值。
1. 路由的过滤器配置
1.1 路由过滤器GatewayFilter
GatewayFilter是网关中提供的一种过滤器,可以对进入网关的请求和微服务返回的响应做处理:
1.2 过滤器工厂GatewayFilterFactory
Spring提供了31种不同的路由过滤器工厂。例如:
过滤器工厂GatewayFilterFactory
spring 过滤器工厂GatewayFilterFactory 官网
里面详细介绍了每种过滤器的详细作用和使用方法:
1.3 案例:给所有进入user-service的请求添加一个请求头
给所有进入user-service的请求添加一个请求头: Truth=itcast is freaking awesome!
实现方式:在gateway中修改application.yml文件,给user-service的路由添加过滤器:
server:
port: 10010
logging:
level:
cn.itcast: debug
pattern:
dateformat: MM-dd HH:mm:ss:SSS
spring:
application:
name: gateway
cloud:
nacos:
server-addr: localhost:8848 # nacos地址
gateway:
routes:
- id: my-gateway # 路由标示,必须唯一
uri: lb://user-service # 路由的目标地址
predicates: # 路由断言,判断请求是否符合规则
- Path=/user/** # 路径断言,判断路径是否是以/user开头,如果是则符合
filters: # 过滤器
- AddRequestHeader=Truth, Itcast is freaking awesome! # 添加请求头:AddRequestHeader是过滤工厂名字,Truth是key, Itcast is freaking awesome!是value
- id: order-service
uri: lb://order-service
predicates:
- Path=/order/**
- After=2030-01-20T17:42:47.789-07:00[America/Denver]
然后重些UserController里面的方法,使得它可以打印过滤器新加的请求头信息
重写前:
重写后:
@GetMapping("/id")
public User queryById(@PathVariable("id") Long id,
@RequestHeader(value = "Truth", required = false) String truth)
System.out.println("truth: " + truth);
return userService.queryById(id);
然后重启服务,看打印信息:
成功打印出了信息
1.4 默认过滤器
上面的写法只是针对于一个路由,没办法对所有路由生效,如果要对所有的路由都生效,则可以将过滤器工厂写到default下。格式如下:
server:
port: 10010
logging:
level:
cn.itcast: debug
pattern:
dateformat: MM-dd HH:mm:ss:SSS
spring:
application:
name: gateway
cloud:
nacos:
server-addr: localhost:8848 # nacos地址
gateway:
routes:
- id: my-gateway # 路由标示,必须唯一
uri: lb://user-service # 路由的目标地址
predicates: # 路由断言,判断请求是否符合规则
- Path=/user/** # 路径断言,判断路径是否是以/user开头,如果是则符合
# filters: # 过滤器
# - AddRequestHeader=Truth, Itcast is freaking awesome! # 添加请求头:AddRequestHeader是过滤工厂名字,Truth是key, Itcast is freaking awesome!是value
- id: order-service
uri: lb://order-service
predicates:
- Path=/order/**
- After=2030-01-20T17:42:47.789-07:00[America/Denver]
default-filters:
- AddRequestHeader=Truth, Itcast is freaking awesome! # 添加请求头:AddRequestHeader是过滤工厂名字,Truth是key, Itcast is freaking awesome!是value
1.5 小结
以上是关于SpringCloud 统一网关Gateway -- 路由的过滤器配置默认过滤器的主要内容,如果未能解决你的问题,请参考以下文章
SpringCloud 统一网关Gateway -- 路由的过滤器配置默认过滤器
SpringCloud 统一网关Gateway -- 全局过滤器 GlobalFilter@Order注解过滤器链执行顺序Gateway跨域问题处理
SpringCloud 统一网关Gateway -- 全局过滤器 GlobalFilter@Order注解过滤器链执行顺序Gateway跨域问题处理