一、安装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;
}
}