Class SignClientHelper
java.lang.Object
tech.riemann.nif.web.sign.SignClientHelper
签名客户端辅助工具类
用于客户端在发送请求前生成签名和相关Header信息
使用示例:
// 1. 创建辅助工具(指定算法和密钥)
SignClientHelper helper = new SignClientHelper("app001", "app001-secret", SignAlgorithm.HMAC_SHA256);
// 2. 准备业务参数
Map<String, String> params = new TreeMap<>();
params.put("amount", "100.00");
params.put("orderId", "123456");
// 3. 生成签名信息
SignInfo signInfo = helper.generateSignInfo(params);
// 4. 发送请求(签名信息通过Header传递)
HttpClient.post("/api/payment", params)
.header(signInfo.getAppIdHeader(), signInfo.getAppId())
.header(signInfo.getSignHeader(), signInfo.getSign())
.header(signInfo.getTimestampHeader(), signInfo.getTimestamp())
.header(signInfo.getNonceHeader(), signInfo.getNonce());
- Author:
- Kerbores(kerbores@riemann.tech)
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classHeader配置类static class签名信息封装类 -
Constructor Summary
ConstructorsConstructorDescriptionSignClientHelper(String appId, String secret, SignAlgorithm algorithm) 构造函数(使用默认Header名称)SignClientHelper(String appId, String secret, SignAlgorithm algorithm, SignClientHelper.HeaderConfig headerConfig) 构造函数(自定义Header名称) -
Method Summary
Modifier and TypeMethodDescriptiongenerateSignHeaders(Object pojo, String requestPath) 生成签名Header Map(从POJO对象提取参数)generateSignHeaders(Map<String, String> params, String requestPath) 生成签名Header MapgenerateSignInfo(Map<String, String> params, String requestPath) 生成签名信息生成签名信息(自定义nonce)generateSignInfoFromPojo(Object pojo, String requestPath) 生成签名信息(从POJO对象提取参数)generateSignInfoFromPojo(Object pojo, String requestPath, String nonce) 生成签名信息(从POJO对象提取参数,自定义nonce)获取签名算法getAppId()获取应用ID
-
Constructor Details
-
SignClientHelper
构造函数(使用默认Header名称)- Parameters:
appId- 应用IDsecret- 应用密钥algorithm- 签名算法
-
SignClientHelper
public SignClientHelper(String appId, String secret, SignAlgorithm algorithm, SignClientHelper.HeaderConfig headerConfig) 构造函数(自定义Header名称)- Parameters:
appId- 应用IDsecret- 应用密钥algorithm- 签名算法headerConfig- Header配置
-
-
Method Details
-
generateSignInfo
生成签名信息根据业务参数生成完整的签名信息,包括签名、时间戳、nonce等
签名内容组成(按字典序排序后连接): 1. 请求参数的MD5摘要(paramsMd5) 2. 应用密钥(appSecret) 3. 时间戳(timestamp) 4. 请求路径(requestPath) 5. 随机字符串(nonce)
- Parameters:
params- 业务参数(用于签名计算)requestPath- 请求路径(如 /api/payment)- Returns:
- 签名信息对象
-
generateSignInfo
-
generateSignInfoFromPojo
生成签名信息(从POJO对象提取参数)自动从POJO对象中提取签名字段,支持嵌套对象、集合等复杂类型
提取规则: 1. 简单类型(基本类型、String、Number、Boolean、Date、Time等):直接转为字符串 2. 嵌套POJO对象:递归提取字段,使用 "父字段名.子字段名" 格式 3. 集合/数组:转为JSON格式字符串 4. Map:直接提取键值对 5. null值:跳过 6. static/transient字段:跳过
- Parameters:
pojo- 业务POJO对象(用于签名计算)requestPath- 请求路径(如 /api/payment)- Returns:
- 签名信息对象
-
generateSignInfoFromPojo
public SignClientHelper.SignInfo generateSignInfoFromPojo(Object pojo, String requestPath, String nonce) 生成签名信息(从POJO对象提取参数,自定义nonce)- Parameters:
pojo- 业务POJO对象(用于签名计算)requestPath- 请求路径(如 /api/payment)nonce- 自定义nonce- Returns:
- 签名信息对象
-
generateSignHeaders
生成签名Header Map生成包含所有签名相关Header的Map对象,便于各种HTTP客户端添加请求头信息
使用示例:
// 方式一:使用Map参数 Map<String, String> params = new TreeMap<>(); params.put("amount", "100.00"); params.put("orderId", "123456"); Map<String, String> headers = helper.generateSignHeaders(params, "/api/payment"); // 方式二:使用POJO对象 OrderDTO order = new OrderDTO(); order.setAmount(new BigDecimal("100.00")); order.setOrderId("123456"); Map<String, String> headers = helper.generateSignHeaders(order, "/api/payment"); // 添加到HTTP请求 HttpClient.post("/api/payment") .headers(headers) .body(params) .execute();- Parameters:
params- 业务参数(用于签名计算)requestPath- 请求路径(如 /api/payment)- Returns:
- 包含所有签名Header的Map(key为Header名称,value为Header值)
-
generateSignHeaders
-
getAppId
-
getAlgorithm
-