赞
踩
因为公司需求,在前端请求接口的过程中,我们的某个接口参数必须经过一次加密,因为用到这个接口的地方有点多,如果在对应的业务js文件中一个一个改,那工作量就有点大了,幸好这些页面中都有使用到一个公共js,那么我们直接在里面通过ajaxSetup实现类似拦截器的效果。
废话不多说,直接上代码。需要注意,我的后端是用的java哦,解码也是用的java。
//其他逻辑处理代码省略...
//字符串转base64
function getEncode64(str){
// 用这种方式可避免中文乱码
return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g,
function toSolidBytes(match, p1) {
return String.fromCharCode('0x' + p1);
}));
}
// 通过ajaxSetup在请求发送前对参数进行加密处理
$.ajaxSetup({
beforeSend: function (xhr) {
if (arguments[1].type === "GET") {
var data = arguments[1].url.split("?");
var ip = data[0];
var params = data[1];
var paramsJson = {};
if (params) {
// 解析参数
params.replace(/([^?&]+)=([^?&]+)/g, function (s, v, k) {
paramsJson[v] = decodeURIComponent(k);
return k + '=' + v;
});
if ("content" in paramsJson) {
var content = getEncode64(paramsJson.content);
paramsJson.content = content;
var paramsString = "";
//将json格式转化为urlcode编码格式的数据
for (var key in paramsJson) {
paramsString = paramsString + key + "=" + encodeURIComponent(paramsJson[key]) + "&";
}
paramsString.substr(0, paramsString.length - 1);
//修改参数
arguments[1].url = ip + "?" + paramsString;
}
}
} else {
var params = arguments[1].data;
//将urlcode编码转化为json
if (params) {
var paramsJson = {};
// 解析参数
params.replace(/([^?&]+)=([^?&]+)/g, function (s, v, k) {
paramsJson[v] = decodeURIComponent(k);
return k + '=' + v;
});
if ("content" in paramsJson) {
var content = getEncode64(paramsJson.content);
paramsJson.content = content;
var paramsString = "";
//将json格式转化为urlcode编码格式的数据
for (var key in paramsJson) {
paramsString = paramsString + key + "=" + encodeURIComponent(paramsJson[key]) + "&";
}
paramsString.substr(0, paramsString.length - 1);
//修改参数
arguments[1].data = paramsString;
}
}
}
}
});
// 其他业务代码省略...
function test() {
$.ajax({
type: "POST",
url: "http://localhost:8083/testController/test",
data: {content: "奥利给"},
success: function (data) {
console.log(data);
},
//失败回调
error: function (XMLHttpRequest, textStatus, errorThrown) {
//查看错误信息
}
});
}
@PostMapping(value = "test")
@ApiOperation(value = "测试接口")
public void test(String content) {
boolean isBase = Base64Util.isFromBase64(content);
if(isBase){
String test = Base64Util.getFromBase64(content);
log.info("获取到字符串:"+test);
}
}
import java.io.UnsupportedEncodingException;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
public class Base64Util {
//加密
public static String getBase64(String str){
byte[] b=null;
String s=null;
try {
b = str.getBytes("utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
if(b!=null){
s=new BASE64Encoder().encode(b);
}
return s;
}
// 解密
public static String getFromBase64(String s) {
byte[] b = null;
String result = null;
if (s != null) {
BASE64Decoder decoder = new BASE64Decoder();
try {
b = decoder.decodeBuffer(s);
result = new String(b, "utf-8");
} catch (Exception e) {
e.printStackTrace();
}
}
return result;
}
// 通过正则表达式判断是否base64加密过的字符串
public static boolean isFromBase64(String inputStr) {
String base64Pattern = "^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$";
Boolean isLegal = inputStr.matches(base64Pattern);
if (!isLegal) {
return false;
}
return true;
}
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。