首页 > 其他分享 >网关路由快速入门

网关路由快速入门

时间:2024-05-28 10:10:50浏览次数:21  
标签:网关 请求 exchange 跨域 过滤器 public 路由 入门

  1. 在Spring Boot中整合Spring Cloud Gateway是一个常见的需求,尤其是当需要构建一个微服务架构的应用程序时。Spring Cloud Gateway是Spring Cloud生态系统中的一个项目,它提供了一个API网关,用于处理服务之间的请求路由、安全、监控和限流等功能。

  2. 使用

    • 引入依赖
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway</artifactId>
    </dependency>
    
    • 进行配置
    server:
      port: 9527
     
    spring:
      application:
        name: cloud-gateway
      cloud:
        nacos:
          server-addr: localhost:8848 		 # nacos 地址
        gateway:
          routes:
            - id: user_service #路由的ID,没有固定规则但要求唯一,建议配合服务名
              uri: lb://user_service #匹配后提供服务的路由地址
              predicates:
                - Path=/users/**         # 断言,路径相匹配的进行路由
              filters: 					   # 过滤器配置
                - AddRequestHeader=token, test # 添加请求头
    
  3. 多种配置

    • Predicate 断⾔条件

    • 路由过滤器

    • 默认过滤器配置

    spring:
      cloud:
        gateway:
          routes:
            - id: user-service 
              uri: lb://userservice 
              predicates: 
              - Path=/user/**
          default-filters: 					# 默认过滤器配置
            - AddRequestHeader=token, test  # 添加请求头
    
  4. 自定义全局路由过滤器: order数值越大优先级越低, 负的越多, 优先级越高

    @Component
    public class GateWayFilter implements GlobalFilter, Ordered {
    
        @Override
        public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
    
            // 1.获取请求参数 
            //1.这里的request并不是servlet中的request  
            //2.返回值是一个多键的map集合、也就是说这个map集合的键可以重复
            MultiValueMap<String, String> params = exchange.getRequest().getQueryParams();
            // 2.获取userName参数
            String userName = params.getFirst("userName");
            // 3.校验
            if ("root".equals(userName)) {
                // 放行
                return chain.filter(exchange);
            }
            // 4.拦截
            // 4.1.禁止访问,设置状态码
            exchange.getResponse().setStatusCode(500);
            // 4.2.结束处理
            return exchange.getResponse().setComplete();
        }
    
        @Override
        public int getOrder() {
            return -1;
        }
    }
    
  5. 设置order值的两种方式

    • 实现Ordered接口,并且重写getOrder方法
    @Component
    public class GateWayFilter implements GlobalFilter, Ordered {
    
        @Override
        public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
    
        }
    
        @Override
        public int getOrder() {
            return -1;
        }
    }
    
    • 使用@Order注解
    @Order(-1)
    @Component
    public class GateWayFilter implements GlobalFilter, Ordered {
        @Override
        public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
    
        }
    }
    
  6. 过滤路由过滤器的执行顺序: 默认过滤器 → 当前路由过滤器 → 全局过滤器

  7. 网关的跨域(请求位置和被请求位置不同源就会发生跨域)问题:浏览器会禁止请求的发起者与服务端发生跨域AJAX请求

    • 解决方案:CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)
    spring:
      cloud:
        gateway:
          globalcors: # 全局的跨域配置
            add-to-simple-url-handler-mapping: true # 解决options请求被拦截问题
            							# options请求 就是一种询问服务器是否浏览器可以跨域的请求
            							# 如果每次跨域都有询问服务器是否浏览器可以跨域对性能也是损耗
            							# 可以配置本次跨域检测的有效期maxAge
            							# 在maxAge设置的时间范围内,不去询问,统统允许跨域
            corsConfigurations:
              '[/**]':
                allowedOrigins: 		# 允许哪些网站的跨域请求 
                  - "http://localhost:8090"
                allowedMethods: 		# 允许的跨域ajax的请求方式
                  - "GET"
                  - "POST"
                  - "DELETE"
                  - "PUT"
                  - "OPTIONS"
                allowedHeaders: "*" 	# 允许在请求中携带的头信息
                allowCredentials: true	# 允许在请求中携带cookie
                maxAge: 360000 			# 本次跨域检测的有效期(单位毫秒)
                						# 有效期内,跨域请求不会一直发option请求去增大服务器压力
    

标签:网关,请求,exchange,跨域,过滤器,public,路由,入门
From: https://www.cnblogs.com/hytip/p/18217262

相关文章

  • 《计算机网络微课堂》4-5 静态路由配置及其可能产生的路由环路问题
    ‍本节课我们介绍静态路由配置及其可能产生的路由环路问题,静态路由配置是指用户或网络管理员使用路由器的相关命令,给路由器人工配置路由表,这种人工配置方式简单,开销小,但不能及时适应网络状态(流量、拓扑等)的变化,一般只在小规模网络中。采用使用静态路由配置,可能出现以下导致产生......
  • Vue框架-路由
    VueRouter笔记1.路由管理安装方式一:采用单页面CDN引入方式使用.方式二:基于vite构建的前端项目工程,安装依赖:在项目根目录下,安装:npminstallvue-router@4-s检查项目根目录下package.json中的dependencies是否多出:"vue-router"依赖.路由简单使用在sr......
  • Vue+OpenLayers7入门到实战:OpenLayers实现在地图上拖拽编辑修改绘制图形
    返回《Vue+OpenLayers7》专栏目录:Vue+OpenLayers7入门到实战前言本章介绍如何使用OpenLayers7在地图上拖拽编辑修改绘制图形。在前面一章中,我们已经学会了如何绘制基础的三种图形线段、圆形和多边形:《Vue+OpenLayers7入门到实战:OpenLayers图形绘制功能,OpenLayers实现在地......
  • Stable Diffusion 提示词入门指南
    前言本文主要讲解StableDiffusion(下文简称SD)提示词的用法,帮助大家生成更高质量的图片本章节主要讲解文生图,其他类型读者可以自行探索。同时本文主要是以StableDiffusionDiscard的形式生成图片如果各位对于图片隐私性、图片版权问题有要求,或是需要能力更加强大、......
  • AI大模型入门基础教程(非常详细),AI大模型入门到精通,收藏这一篇就够了!
    什么是AI大模型?AI大模型是指使用大规模数据和强大的计算能力训练出来的人工智能模型。这些模型通常具有高度的准确性和泛化能力,可以应用于各种领域,如自然语言处理、图像识别、语音识别等。为什么要学AI大模型?2024人工智能大模型的技术岗位与能力培养随着人工智能技术......
  • 强化学习快速入门
    本文章通过强化学习快速入门(https://zhuanlan.zhihu.com/p/699934259)在线发布并更新。1.强化学习直观理解强化学习的应用场景是马尔可夫过程,很多现实中的问题都可以认为是马尔可夫过程,特征是当前状态仅仅与前一个状态有关,而与更早的状态无关。按照随机过程的定义:\[\begin{ali......
  • AI智能体研发之路-模型篇(四):一文入门pytorch开发
    博客导读:《AI—工程篇》AI智能体研发之路-工程篇(一):Docker助力AI智能体开发提效AI智能体研发之路-工程篇(二):Dify智能体开发平台一键部署AI智能体研发之路-工程篇(三):大模型推理服务框架Ollama一键部署​​​​​​​AI智能体研发之路-工程篇(四):大模型推理服务框架Xinference一......
  • 使用istio服务网格作为api网关
    API网关作为客户端访问后端的入口由来已久,主要是管理“南北”流量,近几年开始流行ServiceMesh架构,主要是管理内部系统,(即“东西”流量),而像Istio这样的服务网格也有内置网关,可以将系统内外的流量置于统一控制之下。这通常会给Istio的初次用户带来困惑。ServiceMesh和A......
  • 流媒体内网穿透/组网/视频协议转换EasyNTS上云网关如何更改密码?
    EasyNTS上云网关的主要作用是解决异地视频共享/组网/上云的需求,网页对域名进行添加映射时,添加成功后会生成一个外网访问地址,在浏览器中输入外网访问地址,即可查看内网应用。无需开放端口,EasyNTS上云网关平台会向EasyNTS硬件发送端口组网的指令,短时间内组网成功,并形成云端能力对外发......
  • springboot入门
    springboot创建的方式方式一:访问网站构建项目,下载到本地导入开发工具方式二:使用IDEASpringInitializr创建初始化(推荐使用)方式二的步骤: 发现不能选择java8,修改ServerURL为https://start.aliyun.com/ 这样就可以选择java8了,点击下一步 点击创建 就创建好了新的......