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;
+ }
+
+}