一、安装crypto-js依赖
npm install crypto-js --save-dev
二、在项目中新建一个公共js来存放封装的方法
三、下面在index.js文件中编写公共加解密方法
//引用AES源码js import CryptoJS from "crypto-js/crypto-js"; //密钥放配置文件中,方便以后更新,密钥由服务端生成 const AES_KEY = process.env.API_AES_KEY; /** * aes加密 * @param {*} str 未加密字符串 * @param {} key aes的key */ export const encrypt = function encrypt(str) { var key = CryptoJS.enc.Utf8.parse(AES_KEY); var encrypted = CryptoJS.AES.encrypt(str, key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }); return encrypted.toString(); } /** * aes解密 * @param {*} miwen 待解密字符串 * @param {} key aes的key */ export const decrypt = function decrypt(miwen) { var key = CryptoJS.enc.Utf8.parse(AES_KEY); var decryptedData = CryptoJS.AES.decrypt(miwen, key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }); return decryptedData.toString(CryptoJS.enc.Utf8); }
四、调用方法
import { noEncryptUrlArr, encrypt, decrypt } from "./aes"; //引入(noEncryptUrlArr无需加密接口)
//加密参数 let instance = axios.create({ baseURL: process.env.API_URL, // 请求的基础url timeout: 200000, // 请求超时的毫秒数 withCredentials: true,// 请求携带cookie信息 保持session一致 }) // http请求拦截器 instance.interceptors.request.use( config => { config.headers = { 'Content-Type': 'application/x-www-form-urlencoded', } if (noEncryptUrlArr.indexOf(config.url) === -1 && config.data) {//回调参数为空不解密 config.data = { params: encrypt(JSON.stringify(config.data)) } } config.data = qs.stringify(config.data); return config; }, error => { return Promise.reject(error); } );
//解密回调数据 // http响应拦截器 var times = '' instance.interceptors.response.use( res => { times = new Date(res.headers.date).getTime()||0 const resData = res.data; switch (resData.code * 1) { case 400: doSomething(); return resData; case 401: // 重新授权 doSomething(); return null; default: if (noEncryptUrlArr.indexOf(res.config.url) == -1 && resData.data && typeof resData.data == "string") { resData.data = JSON.parse(decrypt(resData.data)); } return resData; } }