Annotation Interface SignVerify


@Target({TYPE,METHOD}) @Retention(RUNTIME) @Documented public @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)
  • Element Details

    • algorithm

      SignAlgorithm algorithm
      签名算法
      Returns:
      签名算法,默认HMAC-SHA256
      Default:
      HMAC_SHA256
    • signHeader

      String signHeader
      签名参数名(从Header中获取)
      Returns:
      签名Header名,默认X-Sign
      Default:
      "X-Sign"
    • appIdHeader

      String appIdHeader
      appId Header名

      从请求Header中获取appId,用于动态查询密钥

      Returns:
      appId Header名,默认X-App-Id
      Default:
      "X-App-Id"
    • timestampHeader

      String timestampHeader
      时间戳Header名
      Returns:
      时间戳Header名,默认X-Timestamp
      Default:
      "X-Timestamp"
    • expireSeconds

      long expireSeconds
      签名有效期(秒)

      请求时间戳与服务器时间差超过此值则拒绝请求

      Returns:
      有效期秒数,默认300秒(5分钟)
      Default:
      300L
    • enableNonce

      boolean enableNonce
      是否启用nonce防重放

      启用后,同一nonce只能使用一次

      Returns:
      是否启用,默认true
      Default:
      true
    • nonceHeader

      String nonceHeader
      nonce Header名
      Returns:
      nonce Header名,默认X-Nonce
      Default:
      "X-Nonce"