由于项目要做完整性校验,防止参数被中途篡改,所以采取前端先把所有参数组合在一起,用MD5加盐的方式加密一次,然后把明文的参数和加密后的参数一起传入后端,在拦截器里进行参数对比,方式就是在拦截器里面把明文参数再用MD5加密一次,将传入的密文参数进行比对,结果比较坑的事情来了,前端加密的字符串和后端明文加密后的字符串经过比对,发现不一致,经过仔细推敲,发现可能是中文编码的问题造成,在对前端要加密字符串进行编码,和后端的明文字符串进行编码后,问题解决,解决方案如下:
js:
var md5_sign=MD5(encodeURIComponent(‘2350-公司领导-张三-a9e8a4371057’));
java 拦截器:
String key=MD5Util.MD5Encode(URLEncoder.encode("2350-公司领导-张三-a9e8a4371057"));
这样加密后 后端获取的md5_sign参数和加密后的字符串 key 是一致的,如果数据被篡改,前端和后端对比的字符串不一致,请求将会被拦截!