【SpringCloud】Gateway

发布时间:2026/8/28 22:49:36

【SpringCloud】Gateway
目录一、网关路由1.1.认识网关1.2.快速入门?1.2.1.引入依赖1.2.2.配置路由二、网关登录校验2.1.Gateway工作原理?2.2.自定义过滤器2.3.登录校验2.4.微服务获取用户2.4.1.保存用户信息到请求头2.4.2.拦截器获取用户??2.5.OpenFeign传递用户三、配置管理3.1.配置共享?3.2.拉取配置共享3.2.1.引入依赖3.2.2.创建bootstrap.yaml3.3.配置热更新3.3.1.添加配置到Nacos?编辑?3.3.2.配置热更新3.4.动态路由四、总结* *一、网关路由------### 1.1.认识网关网关就是网络的关口。数据在网络间传输从一个网络传输到另一网络时就需要经过网关来做数据的**路由和转发以及数据安全的校验**。前端请求不能直接访问微服务而是要请求网关网关可以做安全控制也就是登录身份校验校验通过才放行 * 通过认证后网关再根据请求判断应该访问哪个微服务将请求转发过去### 1.2.快速入门#### 1.2.1.引入依赖 org.springframework.cloud spring-cloud-starter-gateway com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery org.springframework.cloud spring-cloud-starter-loadbalancer #### 1.2.2.配置路由 server: port: 8080 spring: application: name: gateway cloud: nacos: server-addr: 192.168.150.101:8848 gateway: routes: - id: item-service # 路由规则id自定义唯一 uri: lb://item-service # 路由的目标服务lb代表负载均衡会从注册中心拉取服务列表 predicates: # 路由断言判断当前请求是否符合当前规则符合则路由到目标服务 - Path/items/,/search/# 这里是以请求路径作为判断规则 - id: cart-service uri: lb://cart-service predicates: - Path/carts/** id建议和微服务名保持一致uri路由目标lb负载均衡//服务名称predicates路由断言- Path以路径做匹配二、网关登录校验--------### 2.1.Gateway工作原理1. 客户端请求进入网关后由HandlerMapping对请求做判断找到与当前请求匹配的路由规则Route然后将请求交给WebHandler去处理。 2.WebHandler则会加载当前路由下需要执行的过滤器链Filter chain然后按照顺序逐一执行过滤器后面称为Filter。 3.图中Filter被虚线分为左右两部分是因为Filter内部的逻辑分为pre和post两部分分别会在请求路由到微服务之前和之后被执行。4.只有所有Filter的pre逻辑都依次顺序执行通过后请求才会被路由到微服务。5. 微服务返回结果后再倒序执行Filter的post逻辑。 6. 最终把响应结果返回。 ### 2.2.自定义过滤器网关过滤器链中的过滤器有两种GatewayFilter路由过滤器作用范围比较灵活可以是任意指定的路由Route. *GlobalFilter全局过滤器作用范围是所有路由不可配置。 ### 2.3.登录校验自定义GlobalFilter完成登录校验自定义登录校验过滤器 public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { //1、获取请求头 ServerHttpRequest request exchange.getRequest(); //2.判断是否不需要拦截 if (isExclude(request.getPath().toString())) { return chain.filter(exchange); } //3.获取token List headers request.getHeaders().get(“authorization”); String token null; if (headers ! null !headers.isEmpty()) { token headers.get(0); } //4.解析校验token Long userId null; try { userId jwtTool.parseToken(token); } catch (UnauthorizedException e) { //拦截设置响应状态码 ServerHttpResponse response exchange.getResponse(); response.setRawStatusCode(401); return response.setComplete(); } //System.out.println(userId userId); //保存用户到请求头 String userInfo userId.toString(); ServerWebExchange swe exchange.mutate().//mutate 对下游请求做更改 request(builder - builder.header(“user-info”, userInfo)) .build(); //6.放行 return chain.filter(swe); }### 2.4.微服务获取用户#### 2.4.1.保存用户信息到请求头 //保存用户到请求头 String userInfo userId.toString(); ServerWebExchange swe exchange.mutate().//mutate 对下游请求做更改 request(builder - builder.header(“user-info”, userInfo)) .build();#### 2.4.2.拦截器获取用户 /** * 拦截器,获取用户保存到ThreadLocal/ public class UserInfoInterceptor implements HandlerInterceptor { //在controller执行之前运行 Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { //1.获取用户信息 String userInfo request.getHeader(“user-info”); //2.将用户信息保存到ThreadLocal if (StrUtil.isNotBlank(userInfo)) { UserContext.setUser(Long.valueOf(userInfo)); } //3.放行,只获取用户信息不做拦截 return true; } //清理用户 Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { UserContext.removeUser(); } }配置拦截器 Configuration ConditionalOnClass(DispatcherServlet.class) public class MvcConfig implements WebMvcConfigurer { Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new UserInfoInterceptor()); } }不过需要注意的是这个配置类默认是不会生效的因为它所在的包是com.hmall.common.config与其它微服务的扫描包不一致无法被扫描到因此无法生效。基于SpringBoot的自动装配原理我们要将其添加到resources目录下的META-INF/spring.factories文件中 org.springframework.boot.autoconfigure.EnableAutoConfigurationcom.hmall.common.config.MyBatisConfig,com.hmall.common.config.MvcConfig### 2.5.OpenFeign传递用户利用RequestTemplate类来添加请求头将用户信息保存到请求头中。这样以来每次OpenFeign发起请求的时候都会调用该方法传递用户信息。 Bean public RequestInterceptor UserInfoRequestInterceptor() { return requestTemplate - { Long userId UserContext.getUser(); if (userId ! null) { requestTemplate.header(“user-info”, userId.toString()); } }; }三、配置管理------### 3.1.配置共享我们可以把微服务共享的配置抽取到Nacos中统一管理这样就不需要每个微服务都重复配置了。分为两步在Nacos中添加共享配置 * 微服务拉取配置 ### 3.2.拉取配置共享#### 3.2.1.引入依赖 com.alibaba.cloud spring-cloud-starter-alibaba-nacos-config org.springframework.cloud spring-cloud-starter-bootstrap #### 3.2.2.创建bootstrap.yaml spring: application: name: cart-service # 服务名称 profiles: active: dev cloud: nacos: server-addr: 192.168.150.101 # nacos地址 config: file-extension: yaml # 文件后缀名 shared-configs: # 共享配置 - dataId: shared-jdbc.yaml # 共享mybatis配置 - dataId: shared-log.yaml # 共享日志配置 - dataId: shared-swagger.yaml # 共享日志配置### 3.3.配置热更新#### 3.3.1.添加配置到NacosdataId格式[服务名]-[spring.active.profile].[后缀名]文件名称由三部分组成服务名购物车服务所以是cart-service*spring.active.profile就是spring boot中的spring.active.profile可以省略则所有profile共享该配置 *后缀名例如yaml ####3.3.2.配置热更新创建属性读取类 Data Component ConfigurationProperties(prefix “hm.cart”) public class CartProperties { private Integer maxAmount; } ### 3.4.动态路由四、总结----

相关新闻

DNS 安全漏洞与防护全解析

DNS 安全漏洞与防护全解析

2026/8/28 22:49:36

一、DNS 基础与安全重要性 DNS(域名系统)是互联网的"电话簿",负责把人类可读的域名(如example.com)转换成机器可读的 IP 地址(如 1.2.3.4)。几乎所有的网络应用都依赖DNS,…

逻辑漏洞之越权访问原理、检测与防御全解析

逻辑漏洞之越权访问原理、检测与防御全解析

2026/8/28 22:49:36

一、漏洞原理与本质 越权访问是逻辑漏洞中最常见、危害也最大的一类。攻击者通过修改请求中的用户标识、资源 ID 等参数,访问或操作本不属于自己权限范围内的数据或功能,比如查看别人的订单、修改别人的信息、删除别人的文章、使用管理员功能等。越权漏洞…

用Python量化文本中的直觉化修辞:从分词到趋势分析的完整NLP实战

用Python量化文本中的直觉化修辞:从分词到趋势分析的完整NLP实战

2026/8/28 22:49:36

当我们需要分析某个机构、行业或公共领域的公开文本时,经常会被一个问题困扰:这些文本到底是在“讲事实”,还是在“讲感觉”?尤其是近年来不少公开声明和演讲给人留下了一种“情绪多于依据、结论先于论证”的印象,这种…

Labgrid-MCP:让AI Agent直接控制真实嵌入式开发板的实践指南

Labgrid-MCP:让AI Agent直接控制真实嵌入式开发板的实践指南

2026/8/28 23:59:39

Labgrid-MCP 这个项目,核心就一句话:让 AI Agent 能操作真实嵌入式开发板,而不是只在文档和模拟器里打转。它的思路是在 Model Context Protocol(MCP)和 Labgrid 之间搭一座桥——MCP 负责把 AI 模型和外部工具连接起来…

从压缩包到生成模型:GMVAE项目复现全流程与实战调试指南

从压缩包到生成模型:GMVAE项目复现全流程与实战调试指南

2026/8/28 23:59:39

简介:变分自编码器(VAE)作为生成模型的核心架构之一,通过学习数据的潜在分布实现高效的特征表示与数据生成。其核心原理是通过编码器将输入映射到潜在空间的正态分布,再通过解码器从该分布采样并重建数据,平…

Labgrid-MCP:为嵌入式硬件实验室接入AI Agent操控能力

Labgrid-MCP:为嵌入式硬件实验室接入AI Agent操控能力

2026/8/28 23:59:39

Labgrid-MCP 的目标是把 MCP(Model Context Protocol)能力延伸到真实嵌入式硬件实验室:AI Agent 通过一个标准化的 MCP Server,就能查看目标板状态、控制上电断电、复位开发板、读取串口日志,甚至执行镜像刷写。对于经…

【JavaScript】内存管理-垃圾回收机制-内存泄露

【JavaScript】内存管理-垃圾回收机制-内存泄露

2026/8/28 23:59:39

内存管理 C 语言这样的底层语言一般都有底层的内存管理接口,比如 malloc()和free()。 而 JavaScript 是在创建变量(对象,字符串等)时自动进行了分配内存,并且在不使用它们时“自动”释放。释放的过程称为垃圾回收。 整…

etc目录下的profile.d文件目录设置环境变量和全局脚本shell

etc目录下的profile.d文件目录设置环境变量和全局脚本shell

2026/8/28 23:59:39

一、设置环境变量etc目录下的profile.d文件目录 /etc/profile.d1、编写 vi test.sh文件内容# jdk变量 export ZHK_HOME/root export PATH$PATH:$ZHK_HOME/test # 可以取出来ZHK_HOME变量给ZZZ_HOME赋值 export ZZZ_HOME${ZHK_HOME}/test2、刷新 执行source /etc/profile 命令使…

茶叶病害检测数据集应用:YOLOv8模型训练与部署全流程指南

茶叶病害检测数据集应用:YOLOv8模型训练与部署全流程指南

2026/8/28 23:49:38

简介:目标检测是计算机视觉的核心任务之一,其原理是通过算法在图像中定位并识别出感兴趣的目标物体。这项技术在智慧农业、工业质检、自动驾驶等领域具有极高的技术价值。在农业场景中,目标检测可用于作物生长监测、病虫害识别等,…

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

2026/8/27 11:10:02

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

2026/8/27 7:25:23

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

2026/8/28 7:34:42

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/28 7:35:26

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/28 7:34:51

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/28 7:34:35

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…