介绍
- 对接别人接口或者别人对接自己接口时,很多时候都要进行接口的验签
- 我的理解是
- 防止参数被篡改
 - 自己已的加密方式可以进行身份的识别
 
 
 - 我的理解是
 满足了以下功能
没有做时间处理,一次数据的加密可以一直使用
headers中传输sign
统一为JSON字符串
- {“age”:”1”,”name”:”tan”}
 - [{“age”:”1”,”name”:”tan”},{“age”:”2”,”name”:”tan2”}]
 
params中传输sign
get拼接的格式
- age=1&name=tan
 
加密顺序
自定义
配置文件中设置
jdevelops.apisign.salt=ASDF
引入依赖
<dependency><groupId>cn.jdevelops</groupId><artifactId>aops-apisign</artifactId><version>2.0.2</version></dependency>
使用
@Signature注解形式无需额外配置(自定义盐请参考看上面☝)cn.jdevelops.apisign.annotation.Signature
参数名:sign
// 使用示例@PostMapping(value = "/isSignMD5BeanPJsonH")@Signature(type = SginEnum.MD5HEADER)public ResultVO isSignMD5BeanPJsonH(@RequestBody UserEntity userEntity) {System.out.println("userEntity.toString() = " + userEntity.toString());return ResultVO.successForData(userEntity);}
密钥设置形式有二种
Headers
统一在
headers中
加密方式也有两种
MD5
MD5在线加密 32位小写加密
第一步
第二步
将第一步得到的加密串跟着盐一起在加一次密
最后一步进行请求接口
headers中加入 sign 的参数
SHA
单元测试中测试了下,未仔细测试
参数加密注意
- json 参数加密时不要有空格和换行(即格式化),要不然会有问题
## ❌{"age": 1,"name": "tn"}## ✔{"age":1,"name":"tn"}
 
其他功能
自定义返回错误认证格式
2.0.6 开始不在默认集成 apis-exception 所以下面的功能需要自己集成apis-exception后生效,或者自己自定义自己的全局异常处理器
默认
{"code": 10013,"message": "接口签名不正确","success": false,"traceId": "9726179349106752","ts": 1639385719480}
自定义参考
示例项目地址
测试用例
postMan请求样例
// 验证MD5加密 - post json headerPOST /header/md5/isSignMD5BeanPJsonH HTTP/1.1Host: localhost:8080sign: 9bb8396222ad5472b13785d90f11bc90Content-Type: application/jsonContent-Length: 24{"age":"1","name":"tan"}



