SpringCloud Gateway网关路由配置 接口统一 登录验证 权限校验 路由属性

介绍

Spring Cloud Gateway 根据请求的路径、HTTP 方法、头部等信息,将请求路由到对应的微服务实例。它支持基于动态路由规则的配置,可以根据请求的 URL、查询参数、请求头等条件,灵活地决定将请求转发到哪个微服务。Spring Cloud Gateway 提供了一个单一的入口点,所有来自客户端的请求都通过该网关进行转发。通过这种方式,外部应用无需直接访问各个微服务,提高了架构的可维护性和安全性。

网关也是一个微服务

依赖

xml 复制代码
 <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway</artifactId>
        <version>3.1.4</version>
        <!-- 对应 Spring Cloud 2021.0.4 版本 -->
    </dependency>

其他配合依赖

xml 复制代码
<!--负载均衡-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
    <version>3.1.3</version>  <!-- Spring Cloud OpenFeign 版本 -->
</dependency>

<!--  nacos 服务的注册发现     -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <version>2021.0.5.0</version>
</dependency>

配置文件

yml 复制代码
server:
  port: 80
spring:
  application:
    name: gateway #服务名称
  cloud:
    nacos:
      server-addr: 172.23.4.128:8848 #注册中心

路由配置

yml 复制代码
server:
  port: 80
spring:
  application:
    name: gateway #服务名称
  cloud:
    nacos:
      server-addr: 172.23.4.128:8848 #注册中心
    gateway:
      routes:
        - id: java-user #路由ID 一般为服务名称
          uri: lb://java-user #转发的路径 lb为负载均衡 java-user为服务接口
          predicates: #路由条件
            - Path=/user/** #请求接口路径
            # - Path=/user/**,/path/**    多个控制器这样写
        - id: java-goods
          uri: lb://java-goods
          predicates:
            - Path=/goods/**

这样就可以通过127.0.0.1:80/user/xxx/ 将请求负载均衡到其他微服务上了


路由属性

  • id 路由的唯一标识符
  • uri 路由的目标地址
  • predicates 路由断言,判断请求是否符合当前路由。
  • filter 路由过滤器,对请求或响应做特殊处理

路由断言

路由过滤器

添加请求头

token为请求头名称,123456为值

yml 复制代码
gateway:
  routes:
    - id: java-user #路由ID 一般为服务名称
      uri: lb://java-user #转发的路径 lb为负载均衡 java-user为服务接口
      predicates: #路由条件
        - Path=/user/** #请求接口路径
        # - Path=/user/**,/path/**    多个控制器这样写
    - id: java-goods
      uri: lb://java-goods
      predicates:
        - Path=/goods/**
        
      filters:
        - AddRequestHeader=token,123456

如果微服务的接口很多,每个服务但需要去配置filters就特别麻烦,可以配置全局的请看下方。

微服务获取请求头

java 复制代码
@GetMapping("/list")
public List<Goods> list(@RequestHeader("token") String token ){
    System.out.println(token);
    System.out.println("我被调用");
  return  goodsService.list();
}

全局过滤器

default-filters为全局的不需要一个个配置

yml 复制代码
gateway:
  routes:
    - id: java-user #路由ID 一般为服务名称
      uri: lb://java-user #转发的路径 lb为负载均衡 java-user为服务接口
      predicates: #路由条件
        - Path=/user/** #请求接口路径
        # - Path=/user/**,/path/**    多个控制器这样写
    - id: java-goods
      uri: lb://java-goods
      predicates:
        - Path=/goods/**
  default-filters:
    - AddRequestHeader=token,123456
相关推荐
小码哥_常11 小时前
一套自己部署的 IM,客户端是同一份 Flutter
前端·后端
学长毕设14 小时前
基于SpringBoot的实验室资产管理系统
java·spring boot·后端
zzu123zsw15 小时前
从臃肿的模板调用到声明式契约:深入 UniHttp 动态代理与多渠道生命周期扩展
java·spring boot·microsoft·unihttp
源码集结号16 小时前
云诊所门诊系统源码,基于SpringBoot+Vue.js架构,支持多租户设计与Docker容器化部署
java·spring boot·源码·医院信息系统·门诊系统·诊所系统
努力的小雨16 小时前
给 AI 眼镜开发应用有多难?我从零做了一个陪练,还上架了
后端
论文复现现场16 小时前
WRF、FEA 能用 L40S 加速吗?求解器检查、断点恢复与长期运行
java·数据库·算法·wrf·有限元分析·gpu计算·断点续算
啃瓜子的松鼠16 小时前
泛微OAe9-后端二开异步调用
java
秋天的怀念_David17 小时前
第二十一夜 · 数字黑洞与西西弗斯的惩罚
java·程序人生·算法
excel17 小时前
双 Token 与前端使用 Crypto 公私钥鉴权换 Token,哪种方案更好?
前端·后端
外收内放17 小时前
Python基础语法练习题(73)
java·前端·python