|
@@ -111,10 +111,11 @@ public class MktMgmtHandPushServiceImpl implements MktMgmtHandPushService {
|
|
|
globalRule.getPushAddr() != null && !globalRule.getPushAddr().isEmpty()) {
|
|
|
|
|
|
if (!"All".equals(globalRule.getPushAddr().get(0))){
|
|
|
- String fullAddress = ipLocationUtil.getCityByIP(saveDTO.getPushIP());
|
|
|
- if (fullAddress == null) {
|
|
|
+ String resolvedAddress = ipLocationUtil.getCityByIP(saveDTO.getPushIP());
|
|
|
+ if (resolvedAddress == null) {
|
|
|
return "无法解析推送IP【" + saveDTO.getPushIP() + "】的地址信息";
|
|
|
}
|
|
|
+ String fullAddress = normalizeAddress(resolvedAddress);
|
|
|
|
|
|
// 检查是否匹配pushAddr中的任一地址
|
|
|
boolean addressMatched = false;
|
|
@@ -405,39 +406,66 @@ public class MktMgmtHandPushServiceImpl implements MktMgmtHandPushService {
|
|
|
if (fullAddress == null || allowedAddr == null) {
|
|
|
return false;
|
|
|
}
|
|
|
-
|
|
|
- // 如果允许的地址配置为空,则不匹配
|
|
|
- if (allowedAddr.trim().isEmpty()) {
|
|
|
+
|
|
|
+ String normalizedFull = normalizeAddress(fullAddress);
|
|
|
+ String normalizedAllowed = normalizeAddress(allowedAddr);
|
|
|
+ if (!org.springframework.util.StringUtils.hasText(normalizedAllowed)) {
|
|
|
return false;
|
|
|
}
|
|
|
-
|
|
|
- String trimmedAllowedAddr = allowedAddr.trim();
|
|
|
-
|
|
|
- // 1. 完全匹配
|
|
|
- if (fullAddress.equals(trimmedAllowedAddr)) {
|
|
|
+ if ("all".equalsIgnoreCase(normalizedAllowed)) {
|
|
|
return true;
|
|
|
}
|
|
|
-
|
|
|
- // 2. 检查是否匹配国家级别(如果允许的地址只有国家)
|
|
|
- if (!trimmedAllowedAddr.contains("-")) {
|
|
|
- return fullAddress.startsWith(trimmedAllowedAddr + "-");
|
|
|
+
|
|
|
+ if (normalizedFull.equals(normalizedAllowed)) {
|
|
|
+ return true;
|
|
|
}
|
|
|
-
|
|
|
- // 3. 检查是否匹配国家-省级别
|
|
|
- String[] allowedParts = trimmedAllowedAddr.split("-");
|
|
|
- String[] fullParts = fullAddress.split("-");
|
|
|
-
|
|
|
+
|
|
|
+ String[] allowedParts = normalizedAllowed.split("-");
|
|
|
+ String[] fullParts = normalizedFull.split("-");
|
|
|
+
|
|
|
+ if (allowedParts.length == 1 && fullParts.length >= 1) {
|
|
|
+ return allowedParts[0].equals(fullParts[0]);
|
|
|
+ }
|
|
|
+
|
|
|
if (allowedParts.length == 2 && fullParts.length >= 2) {
|
|
|
return allowedParts[0].equals(fullParts[0]) && allowedParts[1].equals(fullParts[1]);
|
|
|
}
|
|
|
-
|
|
|
- // 4. 检查是否匹配国家-省-市级别
|
|
|
- if (allowedParts.length == 3 && fullParts.length >= 3) {
|
|
|
- return allowedParts[0].equals(fullParts[0]) &&
|
|
|
- allowedParts[1].equals(fullParts[1]) &&
|
|
|
+
|
|
|
+ if (allowedParts.length >= 3 && fullParts.length >= 3) {
|
|
|
+ return allowedParts[0].equals(fullParts[0]) &&
|
|
|
+ allowedParts[1].equals(fullParts[1]) &&
|
|
|
allowedParts[2].equals(fullParts[2]);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
return false;
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 规范化地址字符串:
|
|
|
+ * 1) 将分隔符统一为 '-'; 2) 去除分隔符两侧空格; 3) 去除多余空格
|
|
|
+ */
|
|
|
+ private String normalizeAddress(String input) {
|
|
|
+ if (input == null) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ String s = input.trim();
|
|
|
+ // 统一分隔符,去掉可能的 ISP 信息分隔符
|
|
|
+ s = s.replace('|', '-');
|
|
|
+ s = s.replace('-', '-');
|
|
|
+ s = s.replace('—', '-');
|
|
|
+ // 去除分隔符两侧空格
|
|
|
+ s = s.replaceAll("\\s*-\\s*", "-");
|
|
|
+ // 拆分并重组,移除空段
|
|
|
+ String[] parts = s.split("-");
|
|
|
+ StringBuilder sb = new StringBuilder();
|
|
|
+ for (String p : parts) {
|
|
|
+ if (org.springframework.util.StringUtils.hasText(p)) {
|
|
|
+ if (sb.length() > 0) {
|
|
|
+ sb.append('-');
|
|
|
+ }
|
|
|
+ sb.append(p.trim());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return sb.toString();
|
|
|
+ }
|
|
|
}
|