Annotation Interface SignVerify
接口签名验证注解
标记在Controller方法或类上,表示需要进行签名验证
主要功能: 1. 验证请求签名,防止参数被篡改 2. 验证时间戳,防止请求过期 3. 验证nonce,防止重放攻击
签名生成流程:
1. 收集所有请求参数(排除sign字段本身)
2. 按参数名ASCII升序排序
3. 拼接成 key1=value1&key2=value2 格式
4. 在末尾追加密钥:key1=value1&key2=value2&secret=xxx
5. 计算HMAC-SHA256或SM3哈希值
6. 将哈希值作为sign参数附加到请求中
使用示例:
// 基础用法
@SignVerify
@PostMapping("/api/order")
public Result createOrder(@RequestBody OrderDTO order) {
}
// 自定义配置
@SignVerify(algorithm = SignAlgorithm.HMAC_SHA256, expireSeconds = 300, enableNonce = true)
@PostMapping("/api/payment")
public Result payment(@RequestBody PaymentDTO payment) {
}
- Author:
- Kerbores(kerbores@riemann.tech)
-
Optional Element Summary
Optional ElementsModifier and TypeOptional ElementDescription签名算法appId Header名boolean是否启用nonce防重放long签名有效期(秒)nonce Header名签名参数名(从Header中获取)时间戳Header名
-
Element Details
-
algorithm
-
signHeader
-
appIdHeader
String appIdHeaderappId Header名从请求Header中获取appId,用于动态查询密钥
- Returns:
- appId Header名,默认X-App-Id
- Default:
"X-App-Id"
-
timestampHeader
-
expireSeconds
long expireSeconds签名有效期(秒)请求时间戳与服务器时间差超过此值则拒绝请求
- Returns:
- 有效期秒数,默认300秒(5分钟)
- Default:
300L
-
enableNonce
boolean enableNonce是否启用nonce防重放启用后,同一nonce只能使用一次
- Returns:
- 是否启用,默认true
- Default:
true
-
nonceHeader
-