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

GateWay使用

首先创建一个网关服务,添加对应的依赖

<dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId></dependency>
</dependencies>

然后修改网关的application.yml

spring:cloud:gateway:routes:-id: item                #路由id,必须唯一uri: lb:://item-service       #lb表示负载均衡,后面的是转发的目标服务predicates:              #路由断言,判断请求是否符合以下规则,符合就转发-Path: /items/**,/search/**order: 0   #优先级,数字越小优先级越高filters:  #拦截器     

 路由断言有很多种类型,不多赘述,这里就写一个最常用的path路径匹配,其他查阅资料即可

主要是拦截器部分

①全局过滤器

不需要在yml文件里配置,定义之后直接生效,对全局起作用

@Component
public class AuthGlobalFilter implements GlobalFilter, Ordered {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {String token = exchange.getRequest().getHeaders().getFirst("Authorization");if (token == null || !"admin-token".equals(token)) {exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);return exchange.getResponse().setComplete();}return chain.filter(exchange);}@Overridepublic int getOrder() {return -1; // 越小越先执行}
}

②自定义局部过滤器 (需要自定义过滤器工厂)

@Component
public class LogGatewayFilterFactory extends AbstractGatewayFilterFactory<LogGatewayFilterConfig> {public LogGatewayFilterFactory() {super(LogGatewayFilterConfig.class);}@Overridepublic GatewayFilter apply(LogGatewayFilterConfig config) {return (exchange, chain) -> {System.out.println("日志过滤器触发: " + config.getMessage());if (config.isShowParams()) {System.out.println("请求参数:" + exchange.getRequest().getQueryParams());}return chain.filter(exchange);};}
}

application.yml使用

spring:cloud:gateway:routes:- id: test_routeuri: http://localhost:8080predicates:- Path=/test/**filters:- name: LogGatewayFilterargs:message: "正在访问 test 接口"showParams: true

相关文章:

  • 【CISCO】Se2/0, Se3/0:串行口(Serial) 这里串口的2/0 和 3/0分别都是什么?
  • Python函数完全指南:从零基础到灵活运用
  • [特殊字符]Spring Boot 后台使用 EasyExcel 实现数据报表导出(含模板、样式、美化)
  • **Java面试:技术大比拼**
  • 【人工智能】大模型安全的深度剖析:DeepSeek漏洞分析与防护实践
  • 【C++】Docker常用语法
  • VirtualBox 创建虚拟机并安装 Ubuntu 系统详细指南
  • Ubuntu环境下使用uWSGI服务器【以flask应用部署为例】
  • 牛客月赛115 C题-命运之弹 题解
  • ZArchiver正版:高效文件管理,完美解压体验
  • javaEE——单例模式
  • 机器学习的简单介绍
  • 机器学习和深度学习的对比
  • word批量转pdf工具
  • 基于PHP实现的easy管理系统
  • Office 三大组件Excel、Word、Access 里 VBA 区别对比
  • Matlab/Simulink - BLDC直流无刷电机仿真基础教程(七) - 波形解析专题P2
  • MVC 安全
  • iview自定义下拉树菜单
  • 基于STM32的温湿度光照强度仿真设计(Proteus仿真+程序设计+设计报告+讲解视频)
  • 经济日报:仅退款应平衡各方权益
  • 印尼巴厘岛多地停电,疑似海底电缆发生故障
  • 五一假期多地政府食堂对外开放:部分机关食堂饭菜“秒没”
  • 全红婵/陈芋汐夺得跳水世界杯总决赛女子双人10米台冠军
  • 马克思主义理论研究教学名师系列访谈|高福进:思想政治理论课要伴随时代不断更新和变化
  • “国宝探索记”增强亲子连接,国宝成了生活想象的一部分