当前位置: 首页 > news >正文

Spring Cloud Gateway 网关——路由、过滤器、限流

一、为什么需要网关

没有网关:客户端直接调用各个微服务,混乱且不安全 有网关:统一入口,做路由、鉴权、限流、日志 客户端 → Gateway → 订单服务/库存服务/用户服务

二、引入依赖

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

三、配置路由

server:port:8080spring:cloud:gateway:routes:-id:order-serviceuri:lb://order-servicepredicates:-Path=/api/order/**filters:-StripPrefix=1-id:stock-serviceuri:lb://stock-servicepredicates:-Path=/api/stock/**

四、全局过滤器(鉴权)

@ComponentpublicclassAuthGlobalFilterimplementsGlobalFilter,Ordered{@OverridepublicMono<Void>filter(ServerWebExchangeexchange,GatewayFilterChainchain){ServerHttpRequestrequest=exchange.getRequest();// 放行登录接口Stringpath=request.getURI().getPath();if(path.contains("/auth/login")){returnchain.filter(exchange);}// 校验 TokenStringtoken=request.getHeaders().getFirst("Authorization");if(token==null||!jwtUtil.validateToken(token)){returnunauthorized(exchange);}returnchain.filter(exchange);}privateMono<Void>unauthorized(ServerWebExchangeexchange){exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);returnexchange.getResponse().setComplete();}@OverridepublicintgetOrder(){return-100;}}

五、限流过滤器

@ComponentpublicclassRateLimitFilterimplementsGlobalFilter{@AutowiredprivateStringRedisTemplateredisTemplate;@OverridepublicMono<Void>filter(ServerWebExchangeexchange,GatewayFilterChainchain){Stringip=exchange.getRequest().getRemoteAddress().getAddress().getHostAddress();Stringkey="rate:"+ip;Longcount=redisTemplate.opsForValue().increment(key);if(count==1){redisTemplate.expire(key,10,TimeUnit.SECONDS);}if(count>10){returntooManyRequests(exchange);}returnchain.filter(exchange);}}

💡 觉得有用的话,点赞 + 关注【张老师技术栈】吧!

http://www.jsqmd.com/news/1368119/

相关文章:

  • 从 MongoDB 文档到关系模型:构建可重跑、可对账的数据迁移流水线
  • 语月云自助棋牌室系统升级:AI语音智控、传统门店改造与小程序经营方案 - 甄选测评官
  • 保姆级教程:2026免费工具手把手教学音频变速,时间伸缩不改变音调,适配播客加速与外语慢放 - 今日咨询
  • SSM入门指南:从安装到采样,零基础也能玩转贝叶斯状态空间模型
  • 从LSTM到Informer的长序列预测实战
  • React-multistep完全指南:构建现代化多步骤表单的终极方案
  • 免费开源!Scarab:让空洞骑士模组管理变得前所未有的简单
  • 手把手教学:2026免费工具助你音频转OPUS,保姆级教程详解低延迟高压缩比编码,实时通信与音乐兼得 - 今日咨询
  • VGGT-SLAM 2.0震撼发布:实时密集场景重建的革命性突破
  • MDTraj拓扑结构解析:原子选择与分子系统构建的完整指南
  • 算法面试——排序算法:快排、归并、堆排模板
  • 如何快速使用Video2X:AI视频增强与帧率提升的完整指南
  • Adafruit_nRF52_Arduino高级开发:深入理解SPI与I2C外设驱动
  • 终极文本润色解决方案:openai-polisher插件深度解析与安装指南
  • 2026日喀则卫生间漏水避坑指南 - 企业资讯
  • 未来展望:Ketcher路线图与社区贡献完全指南
  • 解决Accio常见问题:安装失败、版本冲突与Xcode集成方案
  • 5分钟上手openMind/yolov8_ms:从安装到首次检测的完整教程
  • git初始化设置与GitHub绑定
  • TensorFlow 框架深度对比与选型:运营过程中怎样及时止损
  • 提升非技术成员与开发协作效率的智能方案
  • 半天接入:USBKey RESTful API + C 动态库,Web 和 C/S 两套集成路径实战
  • 跨平台云数据管理:AzCopy v10在Linux、Windows与macOS的应用
  • 深入理解Intervention Validation:自定义错误消息与多语言支持技巧
  • 如何编译MachO-Explorer?从源码到运行的简单步骤
  • Excalidraw VS Code插件高级配置:自定义文件关联、导出选项与工作区库设置
  • RT-Thread核心组件解析:一文读懂实时内核与驱动框架
  • 2026 想找广西北流市专业的防水修缮店铺该如何选择? - 甄选测评官
  • Lua-CSharp vs MoonSharp vs NLua:三大C Lua解释器性能测试与深度对比
  • 上海门到门出口货运公司推荐,从国内提货到海外配送怎么选? - 生活动态圈