GateWay使用

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

XML 复制代码
<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

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

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

主要是拦截器部分

①全局过滤器

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

java 复制代码
@Component
public class AuthGlobalFilter implements GlobalFilter, Ordered {

    @Override
    public 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);
    }

    @Override
    public int getOrder() {
        return -1; // 越小越先执行
    }
}

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

java 复制代码
@Component
public class LogGatewayFilterFactory extends AbstractGatewayFilterFactory<LogGatewayFilterConfig> {

    public LogGatewayFilterFactory() {
        super(LogGatewayFilterConfig.class);
    }

    @Override
    public 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使用

XML 复制代码
spring:
  cloud:
    gateway:
      routes:
        - id: test_route
          uri: http://localhost:8080
          predicates:
            - Path=/test/**
          filters:
            - name: LogGatewayFilter
              args:
                message: "正在访问 test 接口"
                showParams: true
相关推荐
panxianren31 分钟前
Bun 1.4 的 bun test --parallel 将 4 秒的测试套件缩短到约 1 秒
java·javascript
sunshine22 girl2 小时前
Java学习七 Java 项目实战2-注册业务
java·学习
省钱兄--zs3 小时前
北京24小时自助健身房系统软件开发实战:从架构设计到部署指南
java·数据仓库·spring boot·小程序·需求分析
youdexiang3 小时前
Android录音软件时间关键词检索功能分析
java·人工智能
sunshine22 girl4 小时前
Java学习七 Java 项目实战1-项目创建和主页面搭建
java·开发语言·学习
code2cat4 小时前
Java进阶篇之AtomicStampedReference:引用回到原值,版本戳仍能记住变化
java·cas·并发编程·aba
泡茶喝茶写代码5 小时前
A股量化数据工程:从 REST 接口到策略信号(第 8 篇):成长能力因子:营收与利润增速
java·python·股票数据api·股票数据api接口·股票量化数据api·股票量化数据接口·股票数据api数据
\光辉岁月/6 小时前
7.javase-面向对象
java·开发语言
weixin_531094696 小时前
heap_4内存管理
java·开发语言·算法
程序员南飞6 小时前
win系统安装minio
java·数据结构·算法