| | |
| | | import { LoadingInstance } from 'element-plus/es/components/loading/src/loading'; |
| | | import FileSaver from 'file-saver'; |
| | | import { getLanguage } from '@/lang'; |
| | | import { encryptBase64, encryptWithAes, generateAesKey } from '@/utils/crypto'; |
| | | import { encrypt } from '@/utils/jsencrypt'; |
| | | import { encryptBase64, encryptWithAes, generateAesKey, decryptWithAes, decryptBase64 } from '@/utils/crypto'; |
| | | import { encrypt, decrypt } from '@/utils/jsencrypt'; |
| | | |
| | | const encryptHeader = 'encrypt-key'; |
| | | let downloadLoadingInstance: LoadingInstance; |
| | | // 是否显示重新登录 |
| | | export const isRelogin = { show: false }; |
| | |
| | | if (isEncrypt && (config.method === 'post' || config.method === 'put')) { |
| | | // 生成一个 AES 密钥 |
| | | const aesKey = generateAesKey(); |
| | | config.headers['encrypt-key'] = encrypt(encryptBase64(aesKey)); |
| | | config.headers[encryptHeader] = encrypt(encryptBase64(aesKey)); |
| | | config.data = typeof config.data === 'object' ? encryptWithAes(JSON.stringify(config.data), aesKey) : encryptWithAes(config.data, aesKey); |
| | | } |
| | | // FormData数据去请求头Content-Type |
| | |
| | | // 响应拦截器 |
| | | service.interceptors.response.use( |
| | | (res: AxiosResponse) => { |
| | | // 加密后的 AES 秘钥 |
| | | const keyStr = res.headers[encryptHeader]; |
| | | // 加密 |
| | | if (keyStr != null && keyStr != '') { |
| | | const data = res.data; |
| | | // 请求体 AES 解密 |
| | | const base64Str = decrypt(keyStr); |
| | | // base64 解码 得到请求头的 AES 秘钥 |
| | | const aesKey = decryptBase64(base64Str.toString()); |
| | | // aesKey 解码 data |
| | | const decryptData = decryptWithAes(data, aesKey); |
| | | // 将结果 (得到的是 JSON 字符串) 转为 JSON |
| | | res.data = JSON.parse(decryptData); |
| | | } |
| | | // 未设置状态码则默认成功状态 |
| | | const code = res.data.code || HttpStatus.SUCCESS; |
| | | // 获取错误信息 |