importaxiosfrom'axios'axios.defaults.timeout=10000//排序等封装方式importmyUtilfrom'../../lib/myutils.js';//引入rsa私钥importrsakeyfrom'../../lib/encrypt/rsakey.js'//引入aes/rsa加密配置文件importUtilsfrom"../../lib/encrypt/utils.js";classHttpClient{constructor(baseUrl=process.env.VUE_APP_BASE_API){this.baseUrl='http://192.168.2.666/uc/'}interceptors(instance){//请求拦截instance.interceptors.request.use((config)=>{if(config.data){//参数为非空过滤、排序、拼接成字符串varbackData=myUtil.ruleParams(config.data)config.data=backData.fliterDta//AES密钥(aesKey)随机生成字符串varmyAesKey=myUtil.randomWord(false,32);//32位//aesParams使用AES加密请求参数varaesParams=Utils.encrypt(JSON.stringify(config.data),myAesKey);//config.data={}config.data['requestData']=aesParams//AES密钥(aesKey)AES加密后,使用rsa私钥加密aes密钥让rsaAesKey=Utils.JSEncryptCommon(rsakey.rsakey,myAesKey);//Vue.$encryptedData(rsakey.rsakey,myAesKey);//解密前使用base64将myAesKey转换为字符串//-----okvarbaseRsaAesKey=rsaAesKey;//encodingconfig.data['sign']=baseRsaAesKeyreturnconfig}returnconfig},(error)=>Promise.reject(error.response))//响应拦截器instance.interceptors.response.use((response)=>{//解密if(response.data.responseData&&response.data.sign){//1.res解密aeskeyvaraesKey=Utils.JSDecryptCommon(response.data.sign)//2.aes解析返回的数据varparseData=Utils.decrypt(response.data.responseData,aesKey)parseData=JSON.parse(parseData)varmyres={data:parseData}const{data}=myresconst{code}=dataif(data&&(code===0||代码===4000))返回数据returnPromise.reject(myres)}else{const{data}=responseconst{code}=dataif(data&&(code===0||code===4000))returndatareturnPromise.reject(response)}},(error)=>Promise.reject(error))}getDefaultOptions(){constconfig={baseURL:this.baseUrl,timeout:10*1000,//请请求超时withCredentials:false,headers:{}}returnconfig}request(options){constinstance=axios.create()options=Object.assign(this.getDefaultOptions(),options)this.interceptors(instance,options.url)返回实例(options)}//下载接口getDefaultOptionsD(){constconfig={baseURL:'https://api-test.baidu.com',timeout:10*1000,//请请求超时withCredentials:false,headers:{}}返回配置}requestD(options){constinstance=axios.create()options=Object.assign(this.getDefaultOptionsD(),options)this.interceptors(instance,options.url)returninstance(options)}}exportdefaultnewHttpClient()复制代码
