首页 > 其他分享 >springCloud (一)gateway (整理&转发)

springCloud (一)gateway (整理&转发)

时间:2023-01-28 17:44:39浏览次数:42  
标签:网关 请求 springCloud auth 转发 过滤器 gateway 路由

Spring Cloud Gateway

  是基于 Spring5.0、SpringBoot2.0 和 Project Reactor 开发的网关,旨在提供一种简单而有效的方式来对 API 进行路由,基于过滤器链的方式提供:安全,监控 / 埋点,和限流。

  Spring Cloud Gateway 基于 Spring Boot2.x、Spring WebFlux 和 Project Reactor 构建,属于异步非阻塞模型。

  Spring Cloud Gateway 的目标,不仅提供统一的路由方式,并且基于 Filter 链的方式提供了网关基本的功能,例如:安全,监控/指标,和限流。

核心观念

(1)Route(路由):

网关配置的基本组成模块,和Zuul的路由配置模块类似。一个Route模块由一个 ID,一个目标 URI,一组断言和一组过滤器定义。如果断言为真,则路由匹配,目标URI会被访问。

单个 URI 的地址的 schema 协议,一般为 http 或者 https 协议。 和注册中心相结合的路由配置的 schema 协议部分为自定义的 lb: 类型,表示从微服务注册中心(如 Eureka)订阅服务,并且进行服务的路由。

(2)Predicate(断言):

这是一个 Java 8 的 Predicate,可以使用它来匹配来自 HTTP 请求的任何内容,例如 headers 或参数。断言的输入类型是一个 ServerWebExchange。

路由匹配规则, Predicates 工厂通过不同的 HTTP 请求参数来匹配,多个 Predicates 工厂可以组合使用。

路由谓词工厂(Route Predicate Factories)

类型路由谓词路由谓词工厂描述
时间相关 After AfterRoutePredicateFactory 在某个时间之后的请求才会被转发,如:`- After=2017-01-20T17:42:47.789-07:00 [America/Denver]`
Before BeforeRoutePredicateFactory 在某个时间之前的请求才会被转发,如:`- Before=2017-01-20T17:42:47.789-07:00 [America/Denver]`
Between BetweenRoutePredicateFactory 在某个时间段之间的才会被转发,如:`- Between=2017-01-20T17:42:47.789-07:00 [America/Denver], 2017-01-21T17:42:47.789-07:00 [America/Denver]`
Cookie 相关 Cookie CookieRoutePredicateFactory `- Cookie=chocolate, ch.p` 名为 chocolate 的表单或者满足正则 ch.p 的表单才会被匹配到进行请求转发
Header 相关 Header HeaderRoutePredicateFactory `- Header=X-Request-Id, \d+` 携带参数 X-Request-Id 或者满足 \d + 的请求头才会匹配
Host HostRoutePredicateFactory `- Host=**.somehost.org,**.anotherhost.org` 当主机名为 somehost.org 或 anotherhost.org 的时候才会被转发
请求相关 Method MethodRoutePredicateFactory `- Method=GET,POST` 只有 GET 和 POST 方法才会匹配转发请求
Path PathRoutePredicateFactory `- Path=/red/{segment},/blue/{segment}` 当请求的路径为 /red/、/blue/ 开头的时才会被转发
Query QueryRoutePredicateFactory `- Query=green` 只要请求中包含 green 参数即可
RemoteAddr RemoteAddrRoutePredicateFactory `- RemoteAddr=192.168.1.1/24` 主机 IP
Weight WeightRoutePredicateFactory `- Weight=group1, 2` 权重是按组计算的,两个参数:group 和 weight(int)

(3)Filter(过滤器):

可以使用它拦截和修改请求,并且对上游的响应,进行二次处理。过滤器为org.springframework.cloud.gateway.filter.GatewayFilter类的实例。

StripPrefix网关过滤器工厂采用一个参数StripPrefix。 StripPrefix参数表示在将请求发送到下游之前从请求中剥离的路径个数。

PrefixPath 过滤器,它的作用和StripPrefix正相反,是在URL路径前面添加一部分的前缀。

工作流程

 

 

 客户端向 Spring Cloud Gateway 发出请求。 由网关处理程序 Gateway Handler Mapping 映射确定请求与路由匹配,则将其发送到网关 Web 处理程序 Gateway Web Handler。 Web 处理程序通过指定的过滤器链将请求发送到我们实际的服务执行业务逻辑,然后返回。 过滤器被虚线分隔的原因是过滤器可以在发送代理请求之前和之后运行逻辑。执行所有 pre 过滤器逻辑,然后发出代理请求;发出代理请求后,将运行 post 过滤器逻辑。

相关配置示例:

spring:
  redis:
    host: localhost
    port: 6379
    password:
  cloud:
    gateway:
      discovery:
        locator:   # 是否与服务发现组件进行结合,通过 serviceId 转发到具体的服务实例。
          lowerCaseServiceId: true  #  将请求路径的服务名配置改成小写
          enabled: true  #默认为false,设为true便开启通过服务中心的自动根据 serviceId 创建路由的功能
      routes:
        # 认证中心
        - id: aei-auth  #### 自定义的路由 ID,保持唯一性
          uri: lb://aei-auth  ### 从注册中心获取服务,且以lb(load-balance)负载均衡方式转发,请求schema一般是http或https
          predicates:
            - Path=/auth/** ### 将以/auth/开头的请求转发到uri为lb://aei-auth的地址上
          filters:  ##过滤器拦截处理
            # 验证码处理
            - CacheRequestFilter  
            - ValidateCodeFilter
            - StripPrefix=1     #将请求发送到下游之前从请求中剥离的1个路径,比如外部请求的url(比如http:/192.168.1.1/auth/login)最后转发到注册中心的服务为:lb://aei-auth/login

参考学习网址:

网关配置   https://my.oschina.net/chaoo/blog/5291146

SpringCloud gateway (史上最全)  https://blog.csdn.net/a1036645146/article/details/106383883

 备注:以上信息仅个人学习整理,部分内容摘抄优秀博主

标签:网关,请求,springCloud,auth,转发,过滤器,gateway,路由
From: https://www.cnblogs.com/xibei666/p/17070976.html

相关文章

  • Nginx根据域名转发到不同的服务
    0.背景外网只放开了3955端口,现在根据不同的域名进行转发,例如:aa.test.com:3955->http://10.7.0.1:3009bb.test.com:3955->http://10.7.0.2:13371.Nginx配置1.1配......
  • 前后端分离项目知识汇总(GateWay,Nacos配置中心,Jenkins自动化部署,项目总结)
    前后端分离项目知识汇总​​前言​​​​整合Gateway网关​​​​网关相关配置​​​​全局Filter​​​​自定义异常处理​​​​整合配置中心​​​​为什么需要配置中心......
  • SpringCloud Alibaba
    前言SpringCloudAlibaba致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件,方便开发者通过SpringCloud编程模型轻松使用这些组件来开......
  • 消息驱动(SpringCloud Stream)
    前言什么是消息驱动?屏蔽底层消息中间件的差异,降低切换成本,统一消息的编程模型官网:​​https://spring.io/projects/spring-cloud-stream#overview​​​​https://cloud.s......
  • 【Javaweb】Servlet八 | 请求转发的代码实现【详解】
    请求的转发什么是请求的转发?请求转发是指,服务器收到请求时,从一次资源转到另一个资源的操作叫做请求转发。 部分代码//获取请求的参数(办事的材料)查看......
  • 路由器分组转发算法
    以下内容参考<<计算机网络第五版>>谢希仁编著p128(1)首先从IP数据报首部提取出目的主机的IP地址D,得出其所在的网络N。(2)若N就是与此路由器直接相连的某个网络,则进行直接交......
  • 路由器功能------BFD (Bidirectional Forwarding Detection)双向转发检测
    原理:1.状态迁移BFD会话建立遵循三次握手,BFD有四种状态:Down:会话处于Down或者刚刚创建Init:已经能够与对端系统通信,本端希望使会话进入Up状态Up:会话已经建立AdminDown:会......
  • SpringCloud网关
    SpringCloud网关目前Cloud主流组件SpringCloudGateway目录一、Gateway简介1、官网2、是什么3、能干嘛4、有Zuul了怎么又出来了gateway5、Gateway特征6、Spring......
  • 集赞转发送大礼 有赞你就来
    集赞转发送大礼有赞你就来PostgreSQL考试认证中心集赞转发奖品大派送活动时间:1.21~2.14  集赞领奖将《PostgreSQL认证考试,2023春节特惠,开始啦!》活动转发至朋......
  • 配置nginx的上游服务器,实现将发送给nginx 的请求转发给网关
    首先需要在nginx的nginx.conf的http模块配置上游服务器  再将nginx中的conf.d中的任意一个配置文件中配置server模块  如果网关是通过host的方式进行匹配,需要......