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跨域问题处理

SpringCloud Gateway网关为认证中心和用户微服务构建统一的认证授权入口

十一SpringCloud实用篇_Gateway服务网关

十一SpringCloud实用篇_Gateway服务网关