最近公司项目在钉钉应用市场上线时,钉钉要求请求的数据需要加密(尤其是不允许暴露各类 id),保障数据安全。因为是上线周期内才提出的加密,所以由前端加密、后端解密来完成需求。后端希望 GET 请求?
后的所有内容按正常请求时的格式进行加密,即加密getResume?page=1&pageSize=10&jobId=2
,加密后的请求为getResume?data=密文
。目前在做 GET 请求的参数加密,实现思路是 axios 请求拦截把 params 对象转成字符串,记录一下两种实现方式。
¶一、URLSearchParams
URLSearchParams 接口定义了一些实用的方法来处理 URL 的查询字符串。
1 | let params = { page: 1, pageSize: 10, jobId: 2 } |
注意
- 1、当 params = null 时,输出
null=
- 2、当 params = undefined || {} 时,输出空字符串
¶二、Object.keys 和 map
1 | let params = { page: 1, pageSize: 10, jobId: 2 } |
注意
- 1、当 params = {} 时,keyList、valueList、valueList1 均输出
[]
- 2、params 不允许为 null 或 undefined,否则 keyList 即会报错
- 3、以上代码可简写为:
1 | let params = { page: 1, pageSize: 10, jobId: 2 } |
¶三、路径 string 转为对象
有没有问号结果都是一样的。
1 | const str = Object.fromEntries(new URLSearchParams('?date=30&job=aaaa&status=8')) |
¶四、加密方法
参考另一篇随笔:Vue 项目中实现 RSA 加密