第十三章 ⽹关Gateway架构 +断⾔+过滤器

1. SpringCloud Gateway配置和交互流程

⽹关的配置项
路由:是⽹关的基本单元,由ID、URI、⼀组Predicate、⼀组Filter组成,根据Predicate进⾏匹配转发

route组成部分
id:路由的ID
uri:匹配路由的转发地址
predicates:配置该路由的断⾔,通过
PredicateDefinition类进⾏接收配置。
order:路由的优先级,数字越⼩,优先级越⾼。

交互流程
客户端向Spring Cloud Gateway发出请求
如果⽹关处理程序映射确定请求与路由匹配
则将其发送到⽹关Web处理程序
通过特定过滤器链运⾏,前置处理-后置处理
第十三章 ⽹关Gateway架构 +断⾔+过滤器_第1张图片

2.SpringCloud Gateway内置路由断⾔

  • 什么是Gateway路由断⾔
    Predicate 来源于Java8,接受输⼊参数,返回⼀个布尔值结果
    Spring Cloud Gateway 中 Spring 利⽤ Predicate 的特性实现了各种路由匹配规则
    转发的判断条件,SpringCloud Gateway⽀持多种⽅式,常⻅如:Path、Query、Method、Header等
    ⽀持多个Predicate请求的转发是必须满⾜所有的Predicate后才可以进⾏路由转发

  • 内置路由断⾔RoutePredicateFactory 接⼝实现类
    第十三章 ⽹关Gateway架构 +断⾔+过滤器_第2张图片

  • 参数编写规则 XXXRoutePredicateFactory,使⽤XXX作为参数配置, 例如下⾯

    predicates:
      - Host=
      - Path=
      - Method=
      - Header=
      - Query=
      - Cookie=
    

3.Gateway内置断⾔实现接⼝定时下线

  • 需求:接⼝需要在指定时间进⾏下线,过后不可以在被访问
    使⽤Before ,只要当前时间⼩于设定时间,路由才会匹配请求
    东8区的2022-02-7T01:01:01.000+8:00后,请求不可访问
    为了⽅便测试,修改时间即可

    predicates:
    - Before=2022-02-07T01:01:01.000+8:00
    

4.SpringCloud Gateway过滤器

  • 什么是⽹关的过滤器
    第十三章 ⽹关Gateway架构 +断⾔+过滤器_第3张图片
  • 过滤器⽣命周期
    PRE: 这种过滤器在请求被路由之前调⽤,⼀般⽤于鉴权、限流等
    POST:这种过滤器在路由到微服务以后执⾏,⼀般⽤于修改响应结果,⽐如增加header信息、打点结果⽇志
  • ⽹关过滤器分类
    局部过滤器GatewayFilter:应⽤在某个路由上,每个过滤器⼯⼚都对应⼀个实现类,并且这些类的名称必须以GatewayFilterFactory 结尾
    全局过滤器:作⽤全部路由上
  • 内置很多局部过滤器,顶级接⼝ GatewayFilterFactory
    第十三章 ⽹关Gateway架构 +断⾔+过滤器_第4张图片
  • 内置很多全局过滤器,顶级接⼝ GlobalFilter
    第十三章 ⽹关Gateway架构 +断⾔+过滤器_第5张图片

5.Gateway全局过滤器实现⽤户鉴权

  • ⾃定义全局过滤器实现鉴权
    @Component
    public class UserGlobalFilter implements GlobalFilter, Ordered {
     @Override
     public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
         //写业务逻辑
         String token = exchange.getRequest().getHeaders().getFirst("token");
    
         //TODO 根据业务开发对应的鉴权规则, JWT
    
         if(StringUtils.isBlank(token)){
             exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
             return exchange.getResponse().setComplete();
         }
         //继续往下执行
         return chain.filter(exchange);
     }
     //数字越小,优先级越高
     @Override
     public int getOrder() {
         return 0;
     }
    }
    

你可能感兴趣的:(AlibabaCloud笔记,gateway,架构,前端)