From da93fafc417b4f590b6ab639ccbbe67c14c8753c Mon Sep 17 00:00:00 2001
From: liu <2021943741@qq.com>
Date: 星期五, 16 十月 2026 17:58:21 +0800
Subject: [PATCH] feat(mes): 种子标签追溯配置改为字典驱动
---
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/framework/config/MesQrCodeConfig.java | 99 ++++++++++++++++---------------------------------
1 files changed, 33 insertions(+), 66 deletions(-)
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/framework/config/MesQrCodeConfig.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/framework/config/MesQrCodeConfig.java
index e18c9f5..c025482 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/framework/config/MesQrCodeConfig.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/framework/config/MesQrCodeConfig.java
@@ -9,7 +9,6 @@
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
-import java.net.URI;
import java.util.Arrays;
/**
@@ -22,6 +21,12 @@
* <li>鐢熶骇缁忚惀鑰呭悕绉板繀濉紙鏍囩鍥涜绱犱箣涓�锛岀己澶卞嵆涓轰笉鍚堣鏍囩锛夛紱</li>
* <li>褰撳墠鐜蹇呴』瀛樺湪鍙覆鏌撲腑鏂囩殑瀛椾綋锛堝惁鍒欐爣绛句腑鏂囦細鍙樻垚鏂规锛夈��</li>
* </ul>
+ * 杩芥函缃戝潃涓庣敓浜х粡钀ヨ�呭悕绉扮殑**杩愯鏃�**鍙栧�间紭鍏堟潵鑷瓧鍏� {@code mes_trace_config}锛�
+ * 鍙湪绠$悊鍚庡彴銆屽瓧鍏哥鐞嗐�嶄腑淇敼鑰屾棤闇�閲嶅惎锛涢厤缃枃浠剁殑鍊奸��灞呬负鍏滃簳榛樿鍊笺��
+ * <p>
+ * 浣嗗惎鍔ㄦ牎楠�**鍙拡瀵归厤缃枃浠�**锛屽師鍥犳湁浜岋細涓�鏄繖閬撻槻绾垮繀椤诲湪鏁版嵁搴撳彲鐢ㄤ箣鍓嶅氨鑳芥嫤浣忎笉鍚堣閰嶇疆锛�
+ * 浜屾槸 @PostConstruct 闃舵涓嶅簲璁块棶鏁版嵁搴撱�傚瓧鍏稿�肩殑鍚堣鏍¢獙鐢� {@link MesTraceConfigResolver}
+ * 鍦ㄨ鍙栨椂瀹屾垚锛堥潪娉曞垯璁� ERROR 骞跺洖閫�閰嶇疆鏂囦欢锛岃璇ョ被娉ㄩ噴锛夈��
*/
@Slf4j
@Configuration(proxyBeanMethods = false)
@@ -38,9 +43,12 @@
@Resource
private Environment environment;
+ @Resource
+ private MesTraceConfigResolver mesTraceConfigResolver;
+
@PostConstruct
public void init() {
- // 1. 娉ㄥ叆閰嶇疆锛堝瓧浣撴牎楠岀嫭绔嬩簬涓氬姟閰嶇疆锛屾湰鍦扮幆澧冨悓鏍峰繀椤婚�氳繃锛屽惁鍒欐爣绛句腑鏂囦笉鍙锛�
+ // 1. 娉ㄥ叆閰嶇疆鏂囦欢鐨勫�硷紙瀛椾綋鏍¢獙鐙珛浜庝笟鍔¢厤缃紝鏈湴鐜鍚屾牱蹇呴』閫氳繃锛屽惁鍒欐爣绛句腑鏂囦笉鍙锛�
MesProQrLabelBuilder.setTraceBaseUrl(mesProperties.getTraceBaseUrl());
MesProQrLabelBuilder.setOperatorName(mesProperties.getOperatorName());
MesProQrLabelBuilder.setImporterName(mesProperties.getImporterName());
@@ -48,16 +56,21 @@
MesProQrLabelBuilder.setAllowPlainQrCode(mesProperties.isAllowPlainQrCode());
QrCodeImageUtils.assertCjkFontAvailable();
- // 2. 闈炴湰鍦扮幆澧冩墽琛屼弗鏍兼牎楠�
+ // 2. 鏍¢獙閰嶇疆鏂囦欢銆備笅闈㈢殑鏍¢獙涓庢棩蹇楅兘蹇呴』璇婚厤缃枃浠剁殑鍊硷紝鍥犳瀛楀吀鏉ユ簮涓嶈兘鍦ㄦ涔嬪墠瑁呴厤
if (isLocalProfile()) {
- log.info("[init] 褰撳墠涓烘湰鍦扮幆澧冿紙{}锛夛紝璺宠繃鏍囩鍚堣閰嶇疆鐨勪弗鏍兼牎楠岋紱traceBaseUrl={}",
+ log.info("[init] 褰撳墠涓烘湰鍦扮幆澧冿紙{}锛夛紝璺宠繃鏍囩鍚堣閰嶇疆鐨勪弗鏍兼牎楠岋紱閰嶇疆鏂囦欢 traceBaseUrl={}",
PROFILE_LOCAL, mesProperties.getTraceBaseUrl());
- return;
+ } else {
+ validateTraceBaseUrl();
+ validateOperatorName();
+ log.info("[init] 浜岀淮鐮佹爣绛鹃厤缃牎楠岄�氳繃锛涢厤缃枃浠� traceBaseUrl={}锛岀敓浜х粡钀ヨ��={}",
+ mesProperties.getTraceBaseUrl(), MesProQrLabelBuilder.resolveOperatorName());
}
- validateTraceBaseUrl();
- validateOperatorName();
- log.info("[init] 浜岀淮鐮佹爣绛鹃厤缃牎楠岄�氳繃锛泃raceBaseUrl={}锛岀敓浜х粡钀ヨ��={}",
- mesProperties.getTraceBaseUrl(), MesProQrLabelBuilder.resolveOperatorName());
+
+ // 3. 鏈�鍚庤閰嶅瓧鍏告潵婧愶細姝ゅ悗 resolveTraceUrl()/resolveOperatorName() 浼樺厛璧板瓧鍏�
+ // 锛堝瓧鍏告湭閰嶇疆鍒欒嚜鍔ㄥ洖閫�閰嶇疆鏂囦欢锛夈�傛澶勫彧瑁呴厤鏂规硶寮曠敤銆佺粷涓嶈皟鐢ㄢ�斺��
+ // 瑙f瀽瀛楀吀闇�瑕佽闂暟鎹簱锛屼笉鑳藉湪 @PostConstruct 闃舵瑙﹀彂銆�
+ MesProQrLabelBuilder.setTraceConfigProvider(mesTraceConfigResolver::resolveSnapshot);
}
private boolean isLocalProfile() {
@@ -65,26 +78,17 @@
}
/**
- * 鏍¢獙杩芥函缃戝潃锛氬繀椤讳负鍏紬鎵爜鍙闂殑鍦板潃
+ * 鏍¢獙閰嶇疆鏂囦欢涓殑杩芥函缃戝潃锛氬繀椤讳负鍏紬鎵爜鍙闂殑鍦板潃
+ * <p>
+ * 涓庡瓧鍏稿�煎叡鐢� {@link MesTraceUrlValidator}锛屼繚璇佷袱涓潵婧愮殑鍑嗗叆闂ㄦ瀹屽叏涓�鑷达紝
+ * 涓嶄細鍑虹幇銆岄厤缃枃浠舵嫤寰椾綇銆佸瓧鍏哥粫寰楄繃銆嶇殑缂哄彛銆�
*/
private void validateTraceBaseUrl() {
String url = StrUtil.trim(mesProperties.getTraceBaseUrl());
- if (StrUtil.isEmpty(url)) {
- throw new IllegalStateException("mes.trace-base-url 鏈厤缃�備簩缁寸爜鏍囩蹇呴』鍖呭惈杩芥函缃戝潃锛�"
- + "璇峰湪閰嶇疆涓~鍐欏叕浼楁壂鐮佸彲璁块棶鐨� H5 婧簮椤靛湴鍧�銆�");
- }
- if (StrUtil.containsAnyIgnoreCase(url, "your-domain", "example.com", "localhost")) {
- throw new IllegalStateException("mes.trace-base-url 浠嶄负鍗犱綅绗︽垨鏈満鍦板潃锛�" + url
- + "锛屽嵃鍑虹殑鏍囩娑堣垂鑰呭皢鏃犳硶璁块棶锛岃濉啓鐪熷疄鐨勫缃戝湴鍧�銆�");
- }
- String host = extractHost(url);
- if (StrUtil.isEmpty(host)) {
- throw new IllegalStateException("mes.trace-base-url 鏍煎紡闈炴硶锛屾棤娉曡В鏋愪富鏈哄悕锛�" + url);
- }
- if (isPrivateHost(host)) {
- throw new IllegalStateException("mes.trace-base-url 鎸囧悜鍐呯綉鍦板潃锛�" + host + "锛夛細" + url
- + "锛屽叕浼楁壂鐮佹棤娉曡闂紝璇峰~鍐欏缃戝彲璁块棶鐨勫湴鍧�銆�");
- }
+ MesTraceUrlValidator.invalidReason(url).ifPresent(reason -> {
+ throw new IllegalStateException("mes.trace-base-url " + reason
+ + "锛堣椤规槸瀛楀吀 " + MesTraceConfigResolver.DICT_TYPE + " 鏈厤缃椂鐨勫厹搴曞�硷級");
+ });
}
/**
@@ -96,47 +100,10 @@
*/
private void validateOperatorName() {
if (StrUtil.isBlank(MesProQrLabelBuilder.resolveOperatorName())) {
- log.warn("[init] mes.operator-name锛堢敓浜х粡钀ヨ�呭悕绉帮級鏈厤缃�傝瀛楁涓虹瀛愭爣绛惧洓瑕佺礌涔嬩竴锛�"
- + "缂哄け鏃跺皢鏃犳硶瀵煎嚭浜岀淮鐮佹爣绛撅紝璇峰敖蹇湪閰嶇疆涓ˉ鍏呫��");
+ log.warn("[init] 鐢熶骇缁忚惀鑰呭悕绉版湭閰嶇疆锛堥厤缃枃浠� mes.operator-name 涓庡瓧鍏� {} 鍧囦负绌猴級銆�"
+ + "璇ュ瓧娈典负绉嶅瓙鏍囩鍥涜绱犱箣涓�锛岀己澶辨椂灏嗘棤娉曞鍑轰簩缁寸爜鏍囩锛岃灏藉揩琛ュ厖銆�",
+ MesTraceConfigResolver.DICT_TYPE);
}
- }
-
- /**
- * 浠� URL 涓彁鍙栦富鏈哄悕
- */
- private String extractHost(String url) {
- try {
- URI uri = URI.create(url);
- return uri.getHost();
- } catch (IllegalArgumentException ex) {
- return null;
- }
- }
-
- /**
- * 鍒ゆ柇鏄惁涓烘湰鏈� / 鍐呯綉 / 閾捐矾鏈湴鍦板潃
- */
- private boolean isPrivateHost(String host) {
- if ("localhost".equalsIgnoreCase(host) || host.endsWith(".local")) {
- return true;
- }
- String[] parts = host.split("\\.");
- if (parts.length != 4) {
- return false; // 鍩熷悕褰㈠紡锛屼氦鐢� DNS 瑙f瀽锛屼笉鍦ㄦ澶勬嫤鎴�
- }
- int a, b;
- try {
- a = Integer.parseInt(parts[0]);
- b = Integer.parseInt(parts[1]);
- } catch (NumberFormatException ex) {
- return false;
- }
- // 127.0.0.0/8 鏈満銆�10.0.0.0/8銆�172.16.0.0/12銆�192.168.0.0/16 绉佺綉銆�169.254.0.0/16 閾捐矾鏈湴
- return a == 127
- || a == 10
- || (a == 172 && b >= 16 && b <= 31)
- || (a == 192 && b == 168)
- || (a == 169 && b == 254);
}
}
--
Gitblit v1.9.3