From 9d04bc5c250f9a86e7d3dfb2ac03629fc9194693 Mon Sep 17 00:00:00 2001 From: zrlw Date: Fri, 12 Jan 2024 22:55:18 +0800 Subject: [PATCH] stop startup if dubbo application name configuration is invalid (#13343) --- .../config/utils/ConfigValidationUtils.java | 18 +++++++++++++----- .../dubbo/config/ReferenceConfigTest.java | 2 +- .../utils/ConfigValidationUtilsTest.java | 3 +++ 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/utils/ConfigValidationUtils.java b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/utils/ConfigValidationUtils.java index 728aa21845..afa057ae7f 100644 --- a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/utils/ConfigValidationUtils.java +++ b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/utils/ConfigValidationUtils.java @@ -491,6 +491,12 @@ public class ConfigValidationUtils { + "Please add to your spring config."); } + String name = config.getName(); + if (!checkName(NAME, name)) { + throw new IllegalStateException( + String.format("please correct dubbo application name: %s at your spring config.", name)); + } + // backward compatibility ScopeModel scopeModel = ScopeModelUtil.getOrDefaultApplicationModel(config.getScopeModel()); PropertiesConfiguration configuration = scopeModel.modelEnvironment().getPropertiesConfiguration(); @@ -504,7 +510,6 @@ public class ConfigValidationUtils { } } - checkName(NAME, config.getName()); checkMultiName(OWNER, config.getOwner()); checkName(ORGANIZATION, config.getOrganization()); checkName(ARCHITECTURE, config.getArchitecture()); @@ -732,8 +737,8 @@ public class ConfigValidationUtils { checkProperty(property, value, MAX_PATH_LENGTH, null); } - public static void checkName(String property, String value) { - checkProperty(property, value, MAX_LENGTH, PATTERN_NAME); + public static boolean checkName(String property, String value) { + return checkProperty(property, value, MAX_LENGTH, PATTERN_NAME); } public static void checkHost(String property, String value) { @@ -789,9 +794,9 @@ public class ConfigValidationUtils { } } - public static void checkProperty(String property, String value, int maxlength, Pattern pattern) { + public static boolean checkProperty(String property, String value, int maxlength, Pattern pattern) { if (StringUtils.isEmpty(value)) { - return; + return false; } if (value.length() > maxlength) { logger.error( @@ -800,6 +805,7 @@ public class ConfigValidationUtils { "", "Parameter value format error. Invalid " + property + "=\"" + value + "\" is longer than " + maxlength); + return false; } if (pattern != null) { Matcher matcher = pattern.matcher(value); @@ -811,7 +817,9 @@ public class ConfigValidationUtils { "Parameter value format error. Invalid " + property + "=\"" + value + "\" contains illegal " + "character, only digit, letter, '-', '_' or '.' is legal."); + return false; } } + return true; } } diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ReferenceConfigTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ReferenceConfigTest.java index 983c19299a..7b67217e57 100644 --- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ReferenceConfigTest.java +++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/ReferenceConfigTest.java @@ -873,7 +873,7 @@ class ReferenceConfigTest { referenceConfig.setGeneric("true"); DubboBootstrap.getInstance() - .application("demo app") + .application("demo-app") .reference(referenceConfig) .initialize(); diff --git a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/utils/ConfigValidationUtilsTest.java b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/utils/ConfigValidationUtilsTest.java index fb6dae095c..5cb5036e69 100644 --- a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/utils/ConfigValidationUtilsTest.java +++ b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/utils/ConfigValidationUtilsTest.java @@ -100,6 +100,9 @@ class ConfigValidationUtilsTest { mockedStatic .when(() -> ConfigValidationUtils.validateApplicationConfig(any())) .thenCallRealMethod(); + mockedStatic + .when(() -> ConfigValidationUtils.checkName(any(), any())) + .thenReturn(true); ApplicationConfig config = new ApplicationConfig(); Assertions.assertThrows(IllegalStateException.class, () -> { ConfigValidationUtils.validateApplicationConfig(config);