Spring Cloud Gateway 路由转发之After(Before)路由断言工厂使用

前言


本文旨在介绍After(Before)路由断言工厂使用,以此类推可以使用其他路由断言工厂

案例


1、概念

网关简单的说就是提供一个对外统一的API入口和出口,统管企业对外的所有API出口。一般来说,网关对外暴露的URL或者接口信息,
我们统称之为路由信息。如果研发过网关中间件,或者使用或了解过ZUUL的,网关的核心肯定是Filter以及FilterChain(Filter责任链)。
Spring Cloud Gateway也具有路由信息和Filter。下面介绍一下Spring Cloud gateway中最重要的几个概念
                                                                                    ---引用自http://xujin.org/sc/gw/gw04/
复制代码
路由(route):路由是网关最基础的部分,路由信息由一个ID、一个目的url、一组断言工厂和一组Filter组成。如果路由断言工厂为真,则说明请求的Url和配置的路由匹配。
复制代码
断言(Predicate): java 8中的断言函数。Spring Cloud Gateway中的断言函数输入类型是Spring 5.0框架中的ServerWebExchange。Spring Cloud Gateway中的断言函数允许开发者去定义匹配来自于http request中的任何信息,比如请求头和参数等。
复制代码
过滤器(filter):一个标准的Spring webFilter。Spring Cloud Gateway中的Filter分为两种类型的Filter,分别是Gateway Filter和Global Filter.网关 Filter实例是由Spring 框架中的网关Filter的特殊工厂构造。request在转发到目前服务之前,response在返回到调用端之前都可以被修改或者自定义。
复制代码

2、什么是After(Before)路由断言?
Before路由断言工厂带有一个UTC时间格式的时间参数,当请求进来的当前时间在路由断言工厂之前会成功匹配,否则不能成功匹配。
After路由断言工厂带有一个UTC时间格式的时间参数,当请求进来的当前时间在路由断言工厂之后会成功匹配,否则不能成功匹配。

3、案例
Spring Cloud Gateway 路由转发案例基础上修改application.yml文件中断言配置

server:
  port: 9001
spring:
  application:
    name: service-agateway
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
    #将此服务设置为网关
    gateway:
      discovery:
        locator:
          enabled: true
      routes:
      #路由名称
      - id: consumer_route
      #跳转路由
        uri: http://www.scnunanshen.online/
      #断言,设置拦截条件
        predicates:
        - After=2018-03-18T17:32:58.129+08:00[Asia/Shanghai]        

#此处为After断言工厂,表示在该时间之后的请求都将跳转到uri
复制代码

4、其他断言工厂

  • 通过Cookie信息配置
  • 通过Header属性匹配
  • 通过Host主机匹配
  • 通过请求方式匹配
  • 通过请求参数匹配
  • 以上方式组合使用

示例:参数匹配方式

server:
  port: 9001
spring:
  application:
    name: service-agateway
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
    #将此服务设置为网关
    gateway:
      discovery:
        locator:
          enabled: true
      routes:
      #路由名称
      - id: consumer_route
      #跳转路由
        uri: http://www.scnunanshen.online/
      #断言,设置拦截条件
        predicates:
        - Query=nan

#此处表示设置当访问url中存在nan属性时,路由才会匹配
#http://localhost:9001/aa?nan=1访问 ,断言为真路由匹配。

#也可以同时设置属性跟值如:- Query=nan,2
#当路由匹配nan=2时,才会被拦截
复制代码

猜你喜欢

转载自juejin.im/post/5c87704de51d4539d9565ddc