架构设计
整体架构图
```
┌─────────────┐ 明文 ┌──────────────────┐ 密文 ┌─────────────┐
│ │ ───────────→ │ │ ───────────→ │ │
│ 原后端服务 │ │ 独立加密中间层 │ │ 前端 Vue │
│ (业务逻辑) │ ←───────────── │ (Gateway/Filter) │ ←───────────── │ │
│ │ 明文 │ │ 密文 │ │
└─────────────┘ └──────────────────┘ └─────────────┘
│
统一加解密拦截器
(可插拔算法策略)
│
┌──────────────┴──────────────┐
│ │
对称算法(AES-GCM) 非对称算法(RSA/ECC)
性能高,适合大数据量 适合密钥交换/小数据量
```
推荐方案:混合加密 + 拦截器模式
```
密钥协商阶段(非对称,仅一次):
┌─────────┐ 1.请求公钥 ┌─────────┐
│ Vue前端 │ ───────────────────→ │ 加密层 │
│ │ ←─────────────────── │ │
└─────────┘ 2.返回RSA公钥 └─────────┘
┌─────────┐ 3.生成AES密钥,用RSA公钥加密后上传
│ Vue前端 │ ───────────────────→ │ 加密层 │ (RSA解密拿到AES Key, 存入会话/Redis)
└─────────┘ └─────────┘
业务数据阶段(对称,每次请求):
┌─────────┐ AES加密的请求体 ┌─────────┐ 转发明文 ┌─────────┐
│ Vue前端 │ ───────────────────→ │ 加密层 │ ─────────────→ │ 原后端 │
│ │ ←─────────────────── │ (拦截器) │ ←───────────── │ │
└─────────┘ AES加密的响应体 └─────────┘ 明文响应 └─────────┘
```
模块划分
**1. 加密中间层(独立部署,Java/Spring)**
-
`EncryptFilter`:统一拦截器,读取/包装 Request、Response Body
-
`CryptoStrategy` 接口:定义 `encrypt()` / `decrypt()`,下挂 `AesStrategy`、`RsaStrategy` 实现,可通过配置切换算法
-
`KeyExchangeController`:负责非对称握手、分发会话密钥
-
反向代理到真实后端(Feign/RestTemplate/WebClient 转发明文)
**2. 前端拦截(Vue + Axios)**
-
Axios 请求拦截器:发出前对 body 做 AES 加密
-
Axios 响应拦截器:收到后自动 AES 解密
-
启动时做一次密钥协商,密钥存内存(不落 localStorage,防泄露)
**3. 性能保障要点**
-
用 AES-GCM(带认证,防篡改)做日常数据加解密,纯内存计算,耗时通常在毫秒级,不会显著拖慢链路
-
RSA 只用于密钥交换,不用于业务数据本身(非对称算法对大数据慢很多)
-
加密层与原后端之间走内网/明文,避免双重加密开销
-
算法通过策略模式 + 配置中心(如 Nacos/Spring Cloud Config)热切换,无需重启
这是架构层面,确认这个方向后我可以分别给你写 Java(Spring Boot Filter + 策略模式)和 Vue(Axios 拦截器)的具体代码。