接口加解密

11/6/2023

# 一、背景与问题

有时候我们需要对一些关键接口进行如下三种情况:

  • 前端请求参数加密,后端解密
  • 后端返回加密,前端解密
  • 请求参数和后端返回 都需要加解密

# 二、架构与思想

通过上述三种情况,我们能清楚了解是在 controller 层进行一些拦截操作,所以自然而然想到了 ControllerAdvice,对于 RequestBodyAdviceAdapterResponseBodyAdvice 进行拦截和处理即可。
当前支持 “国产SM4” 和 “AES” 两种加密算法,后期可以自行扩展

# 三、具体使用

# 3.1、选择加密算法

后端:
进入到net.lab1024.sa.base.module.support.apiencrypt.service包结构,有两个实现类。
默认在ApiEncryptServiceSmImpl类上加了@Service注解,表示使用SM4加解密;若想改为其他,可以再其他 实现ApiEncryptService类上加注解。

前端:
进入到`src/lib/encrypt.js`` 文件,在 如下代码中进行 注释来选择加密算法

// -----------------------  对外暴露: 加密、解密 -----------------------

// 默认使用SM4算法
const EncryptObject = SM4;
// const EncryptObject = AES

...
1
2
3
4
5
6
7

# 3.2、修改秘钥

后端:ApiEncryptService对应的实现类中找到 KEY ,进行修改;

前端: 进入到src/lib/encrypt.js 文件,找到 KEY,进行修改,要和后端保持一致。

# 3.3、参数加密

后端: 在需要解密的 controller方法上加上注解 @ApiDecrypt

前端:
1)使用 lib/axios.js 中的 postEncryptRequest 方法进行 请求加密
2)使用 src/lib/encrypt.js 中的 encryptData 方法直接进行加密

# 3.4、后端返回加密

后端: 在需要解密的 controller方法上加上注解 @ApiEncrypt

前端: 不需要任何操作,因为在lib/axios.js 已经对加密过的数据进行解密了。

# 四、演示案例

后端: 请看java类: AdminApiEncryptController

前端: 请看vue文件:\src\views\support\api-encrypt\api-encrypt-index.vue

支持请求参数加密、解密 支持返回内容加密、解密

# 联系我们

1024创新实验室-主任:卓大 (opens new window),混迹于各个技术圈,研究过计算机,熟悉点 java,略懂点前端。
1024创新实验室(河南·洛阳) (opens new window) 致力于成为中原领先、国内一流的技术团队,以技术创新为驱动,合作各类项目(软件外包、技术顾问、培训等等)。

加 主任 “卓大” 微信
拉你入群,一起学习
关注 “六边形工程师”
分享:赚钱、代码、生活
请 “1024创新实验室” 喝咖啡
支持我们的开源与分享

告白气球 (钢琴版)
JESSE T