前端拦截器过滤字符,响应器转换
// 请求拦截器axios.interceptors.request.use((request) => { let reg = /select|update|and|or|delete|insert|trancate|char|into|substr|ascii|declare|exec|count|master|drop|execute/; let regArr = ['select', 'update', 'and', 'or', 'delete', 'insert', 'trancate', 'char', 'into', 'substr', 'ascii', 'declare', 'exec', 'count', 'master', 'drop', 'execute']; for (let i in request.data) { // 判断data中每一项的数据类型 if (reg.test(request.data[i])) { request.data[i] = intercept.checkSqlString(regArr, request.data[i]); } } return request; });// 响应拦截器axios.interceptors.response.use( response => { /* response: { 第一种 data: { // res code: 0, data: { param: '', data: { params: '', personList: [ personAttributes: {} ], } }, msg:'' } }, response: { 第二种 param: '', params: ''; map: '', } res: code: 0 data: { afterTotal: 2 beforeTotal: 15 chooseTotal: 25 collectiveCount: 10 data: [ 0: {…} 1: {…} 2: {…} 3: {…} 4: {…} 5: {…} ] nowTotal: 8 oneCount: 15 sumTotal: 25 total: 25 } msg: "磨课查询成功" */ let reg = /s`&&`elect|u`&&`pdate|a`&&`nd|o`&&`r|d`&&`elete|i`&&`nsert|t`&&`rancate|c`&&`har|i`&&`nto|s`&&`ubstr|a`&&`scii|d`&&`eclare|e`&&`xec|c`&&`ount|m`&&`aster|d`&&`rop|e`&&`xecute/; let regArr = ['s`&&`elect', 'u`&&`pdate', 'a`&&`nd', 'o`&&`r', 'd`&&`elete', 'i`&&`nsert', 't`&&`rancate', 'c`&&`har', 'i`&&`nto', 's`&&`ubstr', 'a`&&`scii', 'd`&&`eclare', 'e`&&`xec', 'c`&&`ount', 'm`&&`aster', 'd````rop', 'e````xecute']; let res = response.data; // 变量缩写提高可读性 if (res.data) { // 第一种情况 res 中存在 data 对象 for (let i in res.data) { // 判断data中每一项的数据类型 if (Object.prototype.toString.call(res.data[i]) === '[object Object]') { // 类型为对象 for (var j in res.data[i]) { if (reg.test(res.data[i][j])) { res.data[i][j] = intercept.checkSqlResponse(regArr, res.data[i][j]); // 替换字符 } } } else if (Array.isArray(res.data[i])) { let isTwoArray = res.data[i].some(items => { // 判断是否为二维数组 return Array.isArray(items); }); res.data[i].forEach(oneItem => { if (Object.prototype.toString.call(oneItem) === '[object Object]') { // arr子项为obj for (let c in oneItem) { if (reg.test(oneItem[c])) { oneItem[c] = intercept.checkSqlResponse(regArr, oneItem[c]); // 替换字符 } } } else { // arr子项为string if (reg.test(oneItem)) { oneItem = intercept.checkSqlResponse(regArr, oneItem); // 替换字符 } } }); if (isTwoArray) { let twoIndex = res.data[i].findIndex(items => { // 寻找存在二维数组的项的index return Array.isArray(items); }); res.data[i][twoIndex].forEach(twoItem => { if (Object.prototype.toString.call(twoItem) === '[object Object]') { // arr子项为obj for (let d in twoItem) { if (reg.test(twoItem[d])) { twoItem[d] = intercept.checkSqlResponse(regArr, twoItem[d]); // 替换字符 } } } else { // arr子项为string if (reg.test(twoItem)) { twoItem = intercept.checkSqlResponse(regArr, twoItem); // 替换字符 } } }); } } else { if (reg.test(res.data[i])) { // 类型为字符串 res.data[i] = intercept.checkSqlResponse(regArr, res.data[i]); // 替换字符 } } } } if (response.data.status === 1 && response.data.msg === 'Fail, No permissions, Please login !') { if (sessionStorage.isLogin) { store.commit('setLoginFlag', false); router.push({path: '/loginout/login', query: {login: 'timeOut'}}); } } return response; } );
作者:一只小彩蛋
链接:https://juejin.cn/post/7028112141139836959