文章

微服务核心组件

微服务核心组件


一、Spring Cloud Gateway(微服务入口治理)

1. Gateway 的核心组件与工作原理

核心组件:路由(Route)、断言(Predicate)、过滤器(Filter)

工作流程

  1. 请求进入 → 断言匹配路由
  2. 执行前置过滤器链(鉴权、限流)
  3. 负载均衡转发到下游服务
  4. 执行后置过滤器链(响应头处理)
  5. 返回响应

2. Gateway 如何实现跨域(CORS)和统一鉴权

  • 跨域:通过 globalcors 配置全局解决
  • 统一鉴权:编写自定义 GlobalFilter,在请求转发前拦截并校验 Token

二、Spring Cloud LoadBalancer(客户端负载均衡)

1. 客户端负载均衡 vs 服务端负载均衡

对比项 客户端(LoadBalancer) 服务端(Nginx)
实例列表 调用方维护 统一分发
网络开销 少(无中间代理) 多一层转发
架构 去中心化 存在单点瓶颈

2. lb://service-name 在 Gateway 中的工作流程

  1. Gateway 识别 lb:// 前缀
  2. 结合服务发现(Nacos)获取健康实例列表
  3. 交由 LoadBalancer 按策略(默认轮询)选择实例
  4. 转发请求

三、JWT(无状态身份认证)

1. JWT 的组成与安全性

组成

  • Header:算法类型
  • Payload:用户信息/过期时间(Base64 编码,不加密
  • Signature:签名

安全性原理:服务端使用密钥对 Header + Payload 签名,Payload 被篡改后重新计算的签名与原签名不一致,请求被拒绝。

2. JWT vs Session

对比项 Session JWT
状态 有状态(服务端存储) 无状态(Token 自包含)
分布式 需要共享(如 Redis) 天然适合
适用场景 单体应用 微服务/前后端分离

3. JWT 的缺点与解决方案

缺点:一旦签发,过期前始终有效,无法主动作废

解决方案:维护 Token 黑名单(如存入 Redis),每次请求校验是否在黑名单中


四、Sa-Token(轻量级权限框架)

1. 普通模式 vs JWT 模式

对比项 普通模式 JWT 模式
Token 内容 随机字符串 包含用户信息(Header.Payload.Signature)
服务端校验 必须查 Redis/内存 解析验签即可,无需查库

2. 微服务网关中如何实现统一鉴权

在 Gateway 编写 Sa-Token 全局过滤器:

  1. 拦截请求,提取 Header 中的 Token
  2. 调用 StpUtil.checkLogin() 校验
  3. 无效/未登录 → 直接返回 401,避免穿透到下游

1. 核心关系

Cookie 是”通行证”,Session 是”后台储物柜”

Cookie 存储 Session ID,建立浏览器与服务端数据的桥梁。

2. 工作流程

  1. 初次登录:服务器创建 Session,存放用户信息
  2. 发放通行证:生成 Session ID,通过 Set-Cookie 写入浏览器
  3. 后续访问:浏览器自动携带 Cookie 中的 Session ID
  4. 提取数据:服务器根据 Session ID 找到对应数据

3. 核心区别

维度 Cookie Session
存储位置 客户端(浏览器) 服务端(内存/Redis)
安全性 低(易被篡改) 高(客户端只有 ID)
存储大小 ≤ 4KB 理论上无限制
存储内容 Session ID 真实业务数据

4. 为什么不能只用其中一个

  • 只用 Cookie:敏感信息暴露,易被截获篡改
  • 只用 Session:HTTP 无状态,没有 Session ID 无法识别用户

5. 现代架构演变

方案 做法 适用场景
分布式 Session Cookie 存 ID,Session 存 Redis 传统微服务
JWT 用户信息写入 Token,抛弃 Session 前后端分离/微服务

六、综合场景题

完整鉴权链路

用户请求从发起到返回的完整流程

  1. 登录:用户使用 Sa-Token(JWT 模式)登录,服务端生成 JWT Token 返回
  2. 携带 Token:前端后续请求在 Header 中携带 Token
  3. 网关鉴权:Gateway 全局过滤器提取 Token,调用 Sa-Token 验签
  4. 路由转发:鉴权通过后,根据 Path 断言匹配路由,LoadBalancer 从 Nacos 获取实例并转发
  5. 业务处理:下游服务直接从请求头解析用户信息,无需再次验签
本文由作者按照 CC BY 4.0 进行授权