当前位置: 首页 > 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

http://www.xdnf.cn/news/280711.html

相关文章:

  • Linux系统之----进程控制
  • 【C++】哈希表
  • 调试Cortex-M85 MCU启动汇编和链接命令文件 - 解题一则
  • JAVA---多态
  • 文章记单词 | 第61篇(六级)
  • SpringBoot的启动流程
  • Encoder和Decoder的区别
  • MySQL Binlog二进制格式与解析详解
  • MySQL — 数据查询
  • 如何提高情商?(优化版)
  • 【RocketMQ Broker 相关源码】- broker 启动源码(1)
  • 身份认证、访问控制技术、SSO单点登录技术、特权访问管理、身份治理与管理——数据安全守护者
  • 支撑座的安装精度对滚珠丝杆性能有哪些影响?
  • 5.3【T】pc
  • 【Java idea配置】
  • load_dotenv()详解
  • 数据采集文氏管旋风高效湿式除尘器文丘里旋风除尘组合实验装置
  • Nginx核心功能 02
  • SAM-Decoding_ 后缀自动机助力大模型推理加速!
  • 《“昊龙一号”:开启中国航天货运新时代》
  • Linux网络编程 day3 五一结假
  • uniapp开发微信小程序时如何进行分包(新手图文)
  • 人工智能(AI)未来会产生意识吗?
  • 【Qt】常用的类与数据类型
  • 卷积神经网络实战(2)
  • llfc项目分布式服务笔记
  • LeetCode - 91.解码方法
  • linux系统线程实现原理浅析
  • 企业架构革新指南:中台的定义、实践与未来
  • 嵌入式复习第二章