axios使用sm2加密數據后請求參數多了雙引號解決
- 背景
- 問題描述
- 解決過程
背景
因項目安全要求,需對傳給后端的入參加密,將請求參數加密后再傳給后端
前期將axios降低到1.6.7后解決了問題,但最近axios有漏洞,安全要求對版本升級,問題需要繼續解決。
果然,技術棧不解決遲早會有問題。。。
問題描述
升到穩定版本后,在瀏覽器網絡請求參數上發現加密后的參數加上了雙引號
后端的日志也能看出來多了雙引號,導致后端解密失敗
正常的請求參數是不帶雙引號的
解決過程
- 一開始想將content-type轉為text傳給后端,但是此路不通,會導致后端無法接收參數,只能傳json格式
Content-Type: application/json
- 那就轉換思路,看axios是在什么地方將字符串添加了雙引號的,于是在github上找到下面代碼,解決問題
代碼段來自于別人的提交記錄,親測有效
const instance = axios.create({transformRequest: function transformRequest(data, headers) {// doesn't apply the default transformRequest if the data is a string, so that axios doesn't add quotes see :// https://github.com/usebruno/bruno/issues/2043// https://github.com/axios/axios/issues/4034const hasJSONContentType = () => {const contentType = (headers && headers['Content-Type']) || '';return contentType.indexOf('application/json') > -1;};if (typeof data === 'string' && hasJSONContentType()) {return data;}axios.defaults.transformRequest.forEach((tr) => tr(data, headers));}});
相關細節可查看
https://github.com/axios/axios/issues/4034
https://github.com/usebruno/bruno/pull/2449