微服务核心组件
微服务核心组件
一、Spring Cloud Gateway(微服务入口治理)
1. Gateway 的核心组件与工作原理
核心组件:路由(Route)、断言(Predicate)、过滤器(Filter)
工作流程:
- 请求进入 → 断言匹配路由
- 执行前置过滤器链(鉴权、限流)
- 负载均衡转发到下游服务
- 执行后置过滤器链(响应头处理)
- 返回响应
2. Gateway 如何实现跨域(CORS)和统一鉴权
- 跨域:通过
globalcors配置全局解决 - 统一鉴权:编写自定义
GlobalFilter,在请求转发前拦截并校验 Token
二、Spring Cloud LoadBalancer(客户端负载均衡)
1. 客户端负载均衡 vs 服务端负载均衡
| 对比项 | 客户端(LoadBalancer) | 服务端(Nginx) |
|---|---|---|
| 实例列表 | 调用方维护 | 统一分发 |
| 网络开销 | 少(无中间代理) | 多一层转发 |
| 架构 | 去中心化 | 存在单点瓶颈 |
2. lb://service-name 在 Gateway 中的工作流程
- Gateway 识别
lb://前缀 - 结合服务发现(Nacos)获取健康实例列表
- 交由 LoadBalancer 按策略(默认轮询)选择实例
- 转发请求
三、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 全局过滤器:
- 拦截请求,提取 Header 中的 Token
- 调用
StpUtil.checkLogin()校验 - 无效/未登录 → 直接返回 401,避免穿透到下游
五、Session 与 Cookie
1. 核心关系
Cookie 是”通行证”,Session 是”后台储物柜”
Cookie 存储 Session ID,建立浏览器与服务端数据的桥梁。
2. 工作流程
- 初次登录:服务器创建 Session,存放用户信息
- 发放通行证:生成 Session ID,通过
Set-Cookie写入浏览器 - 后续访问:浏览器自动携带 Cookie 中的 Session ID
- 提取数据:服务器根据 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 | 前后端分离/微服务 |
六、综合场景题
完整鉴权链路
用户请求从发起到返回的完整流程
- 登录:用户使用 Sa-Token(JWT 模式)登录,服务端生成 JWT Token 返回
- 携带 Token:前端后续请求在 Header 中携带 Token
- 网关鉴权:Gateway 全局过滤器提取 Token,调用 Sa-Token 验签
- 路由转发:鉴权通过后,根据 Path 断言匹配路由,LoadBalancer 从 Nacos 获取实例并转发
- 业务处理:下游服务直接从请求头解析用户信息,无需再次验签
本文由作者按照
CC BY 4.0
进行授权