Spring Boot实现接口签名验证
import org.springframework.stereotype.Service;
import org.springframework.util.DigestUtils;
import java.nio.charset.StandardCharsets;
import java.util.Map;
import java.util.TreeMap;
@Service
public class SignatureService {
// 根据请求参数生成签名
public String generateSignature(Map<String, String> params, String secretKey) {
// 按参数名称升序排序
Map<String, String> sortedParams = new TreeMap<>(params);
StringBuilder toSign = new StringBuilder();
for (Map.Entry<String, String> entry : sortedParams.entrySet()) {
// 忽略空值
if (entry.getValue() != null && !entry.getValue().isEmpty()) {
toSign.append(entry.getKey()).append(entry.getValue());
}
}
toSign.append(secretKey); // 添加密钥作为签名的一部分
String signature = DigestUtils.md5DigestAsHex(toSign.toString().getBytes(StandardCharsets.UTF_8));
return signature;
}
// 验证签名是否正确
public boolean validateSignature(Map<String, String> params, String signature, String secretKey) {
String actualSignature = generateSignature(params, secretKey);
return actualSignature.equals(signature);
}
}
这段代码提供了一个SignatureService
服务类,其中包含了生成签名和验证签名的方法。generateSignature
方法接收参数映射和密钥,并返回生成的MD5签名。validateSignature
方法接收参数映射、签名和密钥,并返回验证结果。这个服务类可以被Spring Boot应用的其他组件注入和使用。
评论已关闭