Spring Cloud Gateway基础内容(一)

news2024/11/27 10:09:56

文章目录

  • 参考文章
  • 一、Gateway概述
    • 1、工作原理概述
    • 2、gateway特点 (官方描述)
    • 3、网关的重要性(来自尚硅谷)
    • 4、基础配置
  • 二、简单实现+SpringCloud+nacos
    • 1、新建Spring项目
    • 2、添加基础的配置文件
    • 3、添加gateway配置断言规则
  • 三、网关断言规则(基础)
        • After(在什么时间之前)
        • Before(在什么时间之后 )
        • Between(在什么时间之间)
        • Cookie(设置cookie值)
        • Header (设置Header参数)
        • host(设置Header 上的host参数模糊匹配)
        • Method(请求方式限制)
        • Path
        • Query
        • RemoteAddr(远程地址)
        • Weight
        • XForwarded Remote Addr
    • REMOTE_ADDR
    • x_forwarded_for
    • X-Real-IP


参考文章

个人笔记,不同意见,望有交流
直接可以点击跳转连接

Spring 文档

Spring Gateway中文网

尚硅谷

一、Gateway概述

网关API

说白了就相当于你服务加了一个路由器,你的所有服务的服务和调用都通过gateway这个路由器进行交换,你可以在这个路由器上设置很多的规则,比如某个时间之前怎么怎么样,或者之前怎么怎么

当下主流的Java,web程序的网关框架中间件,能够完成路由转发、权限校验、限流控制,白名单和黑名单等

1、工作原理概述

在这里插入图片描述
客户端向 Spring Cloud Gateway 发出请求。

如果Gateway处理程序映射确定一个请求与路由相匹配,它将被发送到Gateway Web处理程序。

这个处理程序通过一个特定于该请求的过滤器链来运行该请求。

过滤器被虚线分割的原因是,过滤器可以在代理请求发送之前和之后运行逻辑。

所有的 “pre” (前)过滤器逻辑都被执行。然后发出代理请求。

在代理请求发出后,“post” (后)过滤器逻辑被运行。


2、gateway特点 (官方描述)

  • 这个项目是基于Spring Framework和Spring Boot构建的。
  • 能够匹配任何请求属性的路由。
  • 谓词和过滤器是特定于路由的。
  • 集成了断路器。
  • 集成了Spring Cloud DiscoveryClient。
  • 易于编写谓词和过滤器。
  • 请求速率限制。
  • 路径重写。

3、网关的重要性(来自尚硅谷)

API网关出现的原因是微服务架构的出现,不同的微服务一般会有不同的网络地址,而外部
客户端可能需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接与各个微服
务通信,会有以下的问题:

  • 客户端会多次请求不同的微服务,增加了客户端的复杂性。
  • 存在跨域请求,在一定场景下处理相对复杂。
  • 认证复杂,每个服务都需要独立认证。
  • 难以重构,随着项目的迭代,可能需要重新划分微服务。例如,可能将多个服务合
    并成一个或者将一个服务拆分成多个。如果客户端直接与微服务通信,那么重构将
    会很难实施。
  • 某些微服务可能使用了防火墙/浏览器不友好的协议,直接访问会有一定的困难。

以上这些问题可以借助API网关解决。API网关是介于客户端和服务器端之间的中间层,
所有的外部请求都会先经过API网关这一层。也就是说,API的实现方面更多的考虑业务
逻辑,而安全、性能、监控可以交由API网关来做,这样既提高业务灵活性又不缺安全性:
使用API网关后的优点如下

  • 易于监控。可以在网关收集监控数据并将其推送到外部系统进行分析。
  • 易于认证。可以在网关上进行认证,然后再将请求转发到后端的微服务,而无须在
    每个微服务中进行认证。
  • 减少了客户端与各个微服务之间的交互次数。

4、基础配置

有两种方式来配置谓词和过滤器:

快捷方式和完全展开的参数。

下面的大多数例子都使用快捷方式。

名称和参数名称作为 code 列在每一节的第一或第二句中。
参数通常按照快捷方式配置所需的顺序列出。


基础
spring:
  cloud:
     gateway:
        routes:    #规则组
        - id: test  # 规则名称
          uri:  #断言成功后的路劲指向
          predicates:  # 断言

快捷方式的配置

名称=参数1,参数2

spring:
  cloud:
    gateway:
      routes:
      - id: after_route
        uri: https://example.org
        predicates:
        - Cookie=mycookie,mycookievalue  # 名称=参数1,参数2

完全展开的参数
一个 name key和一个 args key。
args key是一个键值对的映射,用于配置谓词或过滤器。

spring:
  cloud:
    gateway:
      routes:
      - id: after_route
        uri: https://example.org
        predicates:
        - name: Cookie # 名称
          args:
            name: mycookie # 参数
            regexp: mycookievalue # 参数 

注意:

各种Predicates同时存在于同一个路由时,请求必须同时满足所有的条件才被这个路由匹配

一个请求满足多个路由的谓词条件时,请求只会被首个成功匹配的路由转发

二、简单实现+SpringCloud+nacos

http://localhost:88/test?url=jd

1、新建Spring项目

,选择一个gatway包导入,
在这里插入图片描述

或者直接pom文件导入jar包

     <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>

2、添加基础的配置文件

服务注册
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
spring.application.name=gulimall-getWay
server.port=88


配置注册
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.application.name=gulimall-getWay
spring.cloud.nacos.config.namespace=

3、添加gateway配置断言规则

测试

配置的路由规则,在spring官网上有很多规则

spring:
  cloud:
     gateway:
        routes:
        - id: test
          uri: https://www.baidu.com
          predicates:
          - Query=bd
        - id: test2
          uri: https://www.jd.com
          predicates:
          - Query=url,jd

输入 http://localhost:88/hello?url=jd 就直接访问京东了

在这里插入图片描述

三、网关断言规则(基础)

After(在什么时间之前)

类似 ZonedDateTime
指定日期时间之后的请求
测试

              - id: after
          uri: https://www.baidu.com
          predicates:
             - After= 1710211823186  # 52分之后  1710212063186 # 54分

设置时间为54分时,当前时间为51分无法访问
在这里插入图片描述
设置为52分时,当时时间为53分可以访问

在这里插入图片描述

Before(在什么时间之后 )

这个和上面相反 就不测试了

Between(在什么时间之间)

也和上边差不多都是时间规则

这个是在两个时间中间

        - id: between
          uri: https://www.baidu.com
          predicates:
             - Between= 1710211823186,1710212483186  # 10.50分到11.1分之间
Cookie(设置cookie值)

设置Cookie里面必须包含某一个值

        - id: cookie
          uri: https://www.baidu.com
          predicates:
             - Cookie=token,123

token=12 = 404
在这里插入图片描述
token = 123 = 200
在这里插入图片描述

Header (设置Header参数)

设置,当header里面有 X-Request-Id这个参数的时候,这个参数的值必须符合后面一个正则表达式

        - id: header
          uri: https://www.baidu.com
          predicates:
             - Header=X-Request-Id, \d+

在这里插入图片描述

在这里插入图片描述

host(设置Header 上的host参数模糊匹配)
        - id: host
          uri: https://www.baidu.com
          predicates:
             - Host=**.baidu.com

一种匹配规则,**相当于是模糊匹配

测试
sdfaf.baidu.com 符合**.baidu.com
在这里插入图片描述
sdfaf.baidu 无法匹配 **.baidu.com的后面 故404
在这里插入图片描述

Method(请求方式限制)

这个就比较简单了,就是设置请求方式

        - id: method
          uri: https://www.baidu.com
          predicates:
             - Method=GET

设置get请求
在这里插入图片描述
,也可以设置同事支持两个请求

        - id: method
          uri: https://www.baidu.com
          predicates:
             - Method=GET,post

在这里插入图片描述

这个谓词提取URI模板变量(比如前面例子中定义的 sub)作为名称和值的映射,并将其放在 ServerWebExchange.getAttributes() 中,key值定义在 ServerWebExchangeUtils.URI_TEMPLATE_VARIABLES_ATTRIBUTE。然后这些值就可以被 GatewayFilter 工厂使用了。

Path

Path 路由谓词工厂需要两个参数:一个Spring PathMatcher patterns 的list和一个可选的flag
matchTrailingSlash(默认为 true)。

简单的理解的话就是路劲的模糊匹配,但是也有不同的方式
先看简单的的,这个就是当路径为/foo/时 注意foo后面只能跟1个参数
还可以设置成 - Path=/red/{segment},/blue/{segment}
如果请求路径是 /red/1 或 /red/1/ 或 /red/blue 或 /blue/green,则该路由匹配

        - id: path
          uri: https://www.baidu.com
          predicates:
             - Path=/foo/**

在这里插入图片描述

Query

Query 路由谓词工厂需要两个参数:一个必需的 param 和一个可选的 regexp(这是一个Java正则表达式)。下面的例子配置了一个query 路由谓词。

项目这个就是 当这个路径上的url=jd时成立

            # Query=bd 代表请求参数中必须包含bd
        - id: test
          uri: https://www.baidu.com
          predicates:
          - Query=bd
        - id: test2
          uri: https://www.jd.com
          predicates:
          - Query=url,jd

在这里插入图片描述

RemoteAddr(远程地址)

RemoteAddr 路由谓词工厂接受一个 sources 集合(最小长度为1),它是CIDR注解(IPv4或IPv6)字符串,如 192.168.0.1/16(其中 192.168.0.1 是一个IP地址,16 是一个子网掩码)。下面的例子配置了一个RemoteAddr路由谓词。

这个没测试好

        - id: remoteAddr
          uri: https://www.baidu.com
          predicates:
             - RemoteAddr=
  • 有点复杂后面再查
Weight
spring:
  cloud:
    gateway:
      routes:
      - id: weight_high
        uri: https://weighthigh.org
        predicates:
        - Weight=group1, 8
      - id: weight_low
        uri: https://weightlow.org
        predicates:
        - Weight=group1, 2

此路由将转发~80%的流量到 weighthigh.org,~20%的流量到 weighlow.org。
他这个相当于是访问的权重,有随机性,大概意思就是,来10个请求,8个到high,2个到low

  • 干我怎么测试都测试不成功,先暂时流个坑
XForwarded Remote Addr

XForwarded Remote Addr 路由谓语工厂接受一个 sources 集合(最长度为 1),这些 sources 是 CIDR注解(IPv4 或 IPv6)字符串,如 192.168.0.1/16(其中 192.168.0.1 是一个 IP 地址,16 是子网掩码)。

这个路由谓词允许根据 X-Forwarded-For 的 HTTP Header 对请求进行过滤。
在这里插入图片描述

spring:
  cloud:
    gateway:
      routes:
      - id: xforwarded_remoteaddr_route
        uri: https://example.org
        predicates:
        - XForwardedRemoteAddr=192.168.1.1/24

例如,如果 X-Forwarded-For Header 包含 192.168.1.10,则该路由匹配。

REMOTE_ADDR

x_forwarded_for

X-Real-IP

这三个内容起看参考文章:23云恋49枫: HTTP 请求头中的 Remote_Addr,X-Forwarded-For,X-Real-IP https://www.cnblogs.com/luxiaojun/p/10451860.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1510918.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

游戏行业需要堡垒机吗?用哪款堡垒机好?

相信大家对于游戏都不陌生&#xff0c;上到老&#xff0c;下到小&#xff0c;越来越多的小伙伴开始玩游戏。随着游戏用户的增加&#xff0c;如何保障用户资料安全&#xff0c;如何确保游戏公司数据安全等是一个不容忽视的问题。因此不少人在问&#xff0c;游戏行业需要堡垒机吗…

【动态规划】代码随想录算法训练营第四十六天 |139.单词拆分,关于多重背包,你该了解这些! ,背包问题总结篇!(待补充)

139.单词拆分 1、题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 2、文章讲解&#xff1a;代码随想录 3、题目&#xff1a; 给定一个非空字符串 s 和一个包含非空单词的列表 wordDict&#xff0c;判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词…

work 3/12

#include <iostream>using namespace std;class Rect { private:int width;int height; public:void init(int w,int h){widthw;heighth;}int set_w(int w){cin >> w;return w;}int set_h(int h){cin >> h;return h;}void show(){cout << "面积…

通过Office Web Viewer站点在线展示Office文档内容

方法&#xff1a; https://view.officeapps.live.com/op/view.aspx?src经Url编码的文档线上Url地址 比如&#xff1a; //以下地址来自一份旧项目代码&#xff0c;可见用的就是该方案function OfficeFileViewOnline(url, file_type, file_name) {url "http://14.23.112.2…

Docker容器化技术(数据卷的管理)

数据卷 是一个可供容器使用的特殊目录&#xff0c;它将主机操作系统目录直接 映射进容器&#xff0c;类似于 Linux 中的 mount 行为 。 数据卷&#xff1a;可以提供很多有用的特性 数据卷可以在容器之间共事和重用&#xff0c;容器间传递数据将变得高效与方便&#xff1b;对数…

week06 day04 (数据库高级函数 procedure 、sql写函数)

一. ER模型 矩形&#xff1a; 代表实体椭圆&#xff1a;代表实体的属性菱形&#xff1a;relation 代表实体之间的关系 二. 存储过程&#xff08;procedure&#xff09; 1. 语法 语法: create procedure 存储过程名(参数,…) begin//代码 end// 注意&#xff1a; 因为在存储…

数据结构——堆的应用 堆排序详解

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…

[Prob] Definition 3.7.5 (Function of two r.v.s)

定义3.7.5&#xff08;两个随机变量的函数&#xff09;&#xff1a;给定一个样本空间 \( S \) 的实验&#xff0c;如果 \( X \) 和 \( Y \) 是映射 到X(s) 和 Y(s) 的随机变量&#xff0c;那么 g(X, Y) 就是映射 s 到 g(X(s), Y(s)) 的随机变量。 请注意&#xff0c;我…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:DatePicker)

日期选择器组件&#xff0c;用于根据指定日期范围创建日期滑动选择器。 说明&#xff1a; 该组件从API Version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 无 接口 DatePicker(options?: DatePickerOptions) 根据指定范…

SAP 批量删除工艺路线和主配方_简介

通常我们在创建工艺路线的时候或者在导入工艺路线的时候,会存在数据导入出错,或者你创建的工艺路线需要删除的情况,通常情况下我们第一个想到的就是使用CA02或者C202去删除工艺路线或者是主配方。但是这样会存在一个问题就是,首先我们知道工艺路线和主配方都是存在在组里面…

记一次项目所学(中间件等)-动态提醒功能(RocketMQ)

记一次项目所学(中间件等&#xff09;–动态提醒功能&#xff08;RocketMQ&#xff09; 订阅发布模式与观察者模式 RocketMQ&#xff1a;纯java编写的开源消息中间件 高性能低延迟分布式事务 Redis : 高性能缓存工具&#xff0c;数据存储在内存中&#xff0c;读写速度非常快 …

VBA_NZ系列工具NZ03:利用右键进行筛选操作

我的教程一共九套及VBA汉英手册一部&#xff0c;分为初级、中级、高级三大部分。是对VBA的系统讲解&#xff0c;从简单的入门&#xff0c;到数据库&#xff0c;到字典&#xff0c;到高级的网抓及类的应用。大家在学习的过程中可能会存在困惑&#xff0c;这么多知识点该如何组织…

2024西安天文科技与探索装备展览会-相聚7月

2024西安天文科技与探索装备展览会-相聚7月 时间&#xff1a;2024年7月14-16日 地点&#xff1a;西安国际会展中心 首个面向全球天文产业的展览&#xff1b;中国唯一全面反映天文产业链的盛会&#xff1b; 定位于国际高端产业的展会&#xff1b;众多天文机构鼎力支持和重点培…

HTTPS网络请求失败WiFi请求成功

在xml的config文件中添加raw文件位置 raw文件是证书的pem文件去掉key文件 文件名称去掉多余的.cn

炫云客户端12载风华,最初界面竟长这样?满满都是回忆!

2013年&#xff0c;注定是一个意义非凡的节点 让我们将时间轴拨回到2013年 这一年&#xff0c;到底发生了什么呢&#xff1f; 这一年&#xff0c;嫦娥三号成功落月 中国探月工程开启新征程 这一年&#xff0c;工信部向三大运营商颁发4G牌照 标志着我国正式迈入4G时代 同…

51单片机基础篇系列-超声波测距

&#x1f308;个人主页&#xff1a;会编辑的果子君 &#x1f4ab;个人格言:“成为自己未来的主人~” HC-SR04产品特点 典型工作用电压&#xff1a;5V 超小静态工作电流&#xff1a;小于2mA 感应角度&#xff1a;不大于15度 探测距离&#xff1a;2cm-400cm 高精度&#…

Spring AOP常见面试题

目录 一、对于AOP的理解 二、Spring是如何实现AOP的 1、execution表达式 2、annotation 3、基于Spring API&#xff0c;通过xml配置的方式。 4、基于代理实现 三、Spring AOP的实现原理 四、Spring是如何选择使用哪种动态代理 1、Spring Framework 2、Spring Boot 五…

【C++】STL(四) deque容器

4、deque容器 4.1 简介 ① 功能&#xff1a;双端数组&#xff0c;可以对头端进行插入删除操作&#xff0c;也可以对尾端进行插入和删除操作。 ② deque与vector区别&#xff1a; vector对于头部的插入效率低&#xff0c;数据量越大&#xff0c;效率越低&#xff0c;例如头部…

掘根宝典之C++迭代器简介

在C中&#xff0c;容器是一种用于存储和管理数据的数据结构。C标准库提供了多种容器&#xff0c;每种容器都有其独特的特点和适用场景。 我们知道啊&#xff0c;我们可以通过下标运算符来对容器内的元素进行访问&#xff0c;但是只有少数几种容器才同时支持下标运算符&#xf…

#车载诊断协议DoIP系列 —— 套接字处理 在线检查

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师(Wechat:gongkenan2013)。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 本就是小人物,输了就是输了,不要在意别人怎么看自己。江湖一碗茶,喝完再挣扎,出门靠自己,四海皆为家。人生的面吃一…