本节案例承接上节

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 小结

在这里插入图片描述



Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐