介绍
- 对接别人接口或者别人对接自己接口时,很多时候都要进行接口的验签
- 我的理解是
- 防止参数被篡改
- 自己已的加密方式可以进行身份的识别
- 我的理解是
满足了以下功能
没有做时间处理,一次数据的加密可以一直使用
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 header
POST /header/md5/isSignMD5BeanPJsonH HTTP/1.1
Host: localhost:8080
sign: 9bb8396222ad5472b13785d90f11bc90
Content-Type: application/json
Content-Length: 24
{"age":"1","name":"tan"}