From 3a9409a7bb38fe160f4b4ac5340746a03df06098 Mon Sep 17 00:00:00 2001 From: zhaoyong Date: Tue, 30 Nov 2021 17:40:59 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8A=A5=E8=AD=A6=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- alarm-spring-boot-starter/pom.xml | 2 +- .../alarm/config/AlarmProperties.java | 21 +++- .../alarm/config/DingDingAlarmService.java | 3 +- common-common/pom.xml | 2 +- .../framework/common/utils/RegulateSign.java | 107 ++++++++++++++++++ 5 files changed, 130 insertions(+), 5 deletions(-) create mode 100644 common-common/src/main/java/cn/azxo/framework/common/utils/RegulateSign.java diff --git a/alarm-spring-boot-starter/pom.xml b/alarm-spring-boot-starter/pom.xml index ac4cf7c..6f8c9e7 100644 --- a/alarm-spring-boot-starter/pom.xml +++ b/alarm-spring-boot-starter/pom.xml @@ -6,7 +6,7 @@ cn.axzo.framework alarm-spring-boot-starter - 1.0.1 + 1.0.2 UTF-8 diff --git a/alarm-spring-boot-starter/src/main/java/cn/axzo/framework/alarm/config/AlarmProperties.java b/alarm-spring-boot-starter/src/main/java/cn/axzo/framework/alarm/config/AlarmProperties.java index da164ff..1b442ee 100644 --- a/alarm-spring-boot-starter/src/main/java/cn/axzo/framework/alarm/config/AlarmProperties.java +++ b/alarm-spring-boot-starter/src/main/java/cn/axzo/framework/alarm/config/AlarmProperties.java @@ -24,14 +24,31 @@ public class AlarmProperties { @Data public static final class Destination { + /** + * 报警名称 + */ private String alarmName; + /** + * 标题 + */ private String title; - private String messageType; - + /** + * 通知地址 + */ private String alarmUrl; + /** + * 密钥 + */ + private String secretKey; + + /** + * 消息类型 + */ + private String messageType; + private List atMobiles = new ArrayList<>(); } diff --git a/alarm-spring-boot-starter/src/main/java/cn/axzo/framework/alarm/config/DingDingAlarmService.java b/alarm-spring-boot-starter/src/main/java/cn/axzo/framework/alarm/config/DingDingAlarmService.java index 8b1372b..11417c9 100644 --- a/alarm-spring-boot-starter/src/main/java/cn/axzo/framework/alarm/config/DingDingAlarmService.java +++ b/alarm-spring-boot-starter/src/main/java/cn/axzo/framework/alarm/config/DingDingAlarmService.java @@ -50,8 +50,9 @@ public class DingDingAlarmService implements AlarmService { } String appName = getAppName(); + String serverUrl = destination.getAlarmUrl() + destination.getSecretKey(); log.info("[{} -> ding] AlarmService.alarm request param is {}", appName, JSON.toJSONString(request)); - DingMessageResponse response = restTemplate.postForObject(destination.getAlarmUrl(), request, DingMessageResponse.class); + DingMessageResponse response = restTemplate.postForObject(serverUrl, request, DingMessageResponse.class); log.info("[{} <- ding] AlarmService.alarm response is {}", appName, JSON.toJSONString(response)); } catch (Exception e) { log.error("[alarm <- ding] AlarmService.alarm response is error", e); diff --git a/common-common/pom.xml b/common-common/pom.xml index 06134ea..7bab01e 100644 --- a/common-common/pom.xml +++ b/common-common/pom.xml @@ -6,7 +6,7 @@ cn.axzo.framework common-common - 1.0.12 + 1.0.13 UTF-8 diff --git a/common-common/src/main/java/cn/azxo/framework/common/utils/RegulateSign.java b/common-common/src/main/java/cn/azxo/framework/common/utils/RegulateSign.java new file mode 100644 index 0000000..228e66a --- /dev/null +++ b/common-common/src/main/java/cn/azxo/framework/common/utils/RegulateSign.java @@ -0,0 +1,107 @@ +package cn.azxo.framework.common.utils; + +import cn.hutool.crypto.digest.MD5; +import java.util.Collection; +import java.util.Date; +import java.util.Map; +import java.util.Objects; +import java.util.TreeMap; +import org.springframework.util.StringUtils; + +/** + * 监管签名工具类 + * + * @author zhaoyong + * @see RegulateSign + * @since 2021-11-29 11:05 + */ +public class RegulateSign { + + /** + * app key + */ + public static final String APP_KEY = "appSecret"; + + /** + * sign + */ + public static final String SIGN = "sign"; + + /** + * 签名 + * + * @return + */ + public static boolean checkSign(String appSecret, String sign, + Map params) { + String tobeSignedStr = geneTobeSignedStr(params); + tobeSignedStr = tobeSignedStr.concat("&").concat(APP_KEY + "=" + appSecret); + String str = signByMd5(tobeSignedStr); + return str.equals(sign); + } + + /** + * 签名 + * + * @return + */ + public static boolean checkSign(String appSecret, Map params) { + T signStr = params.get(SIGN); + if (signStr == null) { + throw new RuntimeException("sign 不存在"); + } + params.remove(SIGN); + return checkSign(appSecret, signStr.toString(), params); + } + + /** + * 生成待签名字符串 + * + * @param params + * @return + */ + public static String geneTobeSignedStr(Map params) { + Map sortedMap = new TreeMap<>(params); + StringBuilder tobeSignedStr = new StringBuilder(); + sortedMap.forEach((k, v) -> { + if (Objects.isNull(v)) { + return; + } + if (StringUtils.isEmpty(v)) { + return; + } + if (v instanceof Date) { + long time = ((Date) v).getTime(); + v = time; + } + if (v instanceof Collection) { + return; + } + tobeSignedStr.append(k).append("=").append(v).append("&"); + }); + return tobeSignedStr.substring(0, tobeSignedStr.length() -1); + } + + /** + * md5 签名 + * + * @param data + * @return + */ + public static String signByMd5(String data, String appSecret) { + return signByMd5(data.concat("&" + APP_KEY + "=" + appSecret)); + } + + /** + * md5 签名 + * + * @param data + * @return + */ + public static String signByMd5(String data) { + MD5 md5 = MD5.create(); + String str = md5.digestHex(data).toUpperCase(); + return str; + } + +}