diff --git a/proxy/src/main/java/org/apache/rocketmq/proxy/config/ProxyConfig.java b/proxy/src/main/java/org/apache/rocketmq/proxy/config/ProxyConfig.java index a99b0afc352..8fb5e033948 100644 --- a/proxy/src/main/java/org/apache/rocketmq/proxy/config/ProxyConfig.java +++ b/proxy/src/main/java/org/apache/rocketmq/proxy/config/ProxyConfig.java @@ -272,6 +272,8 @@ public class ProxyConfig implements ConfigFile { private boolean enableBatchAck = false; + private boolean enableControlCharacterCheck = true; + @Override public void initData() { parseDelayLevel(); @@ -1537,4 +1539,12 @@ public boolean isEnableMessageBodyEmptyCheck() { public void setEnableMessageBodyEmptyCheck(boolean enableMessageBodyEmptyCheck) { this.enableMessageBodyEmptyCheck = enableMessageBodyEmptyCheck; } + + public boolean isEnableControlCharacterCheck() { + return enableControlCharacterCheck; + } + + public void setEnableControlCharacterCheck(boolean enableControlCharacterCheck) { + this.enableControlCharacterCheck = enableControlCharacterCheck; + } } diff --git a/proxy/src/main/java/org/apache/rocketmq/proxy/grpc/v2/common/GrpcValidator.java b/proxy/src/main/java/org/apache/rocketmq/proxy/grpc/v2/common/GrpcValidator.java index a556bfe2710..6502c4176a9 100644 --- a/proxy/src/main/java/org/apache/rocketmq/proxy/grpc/v2/common/GrpcValidator.java +++ b/proxy/src/main/java/org/apache/rocketmq/proxy/grpc/v2/common/GrpcValidator.java @@ -107,7 +107,7 @@ public void validateTag(String tag) { if (tag.contains("|")) { throw new GrpcProxyException(Code.ILLEGAL_MESSAGE_TAG, "tag cannot contain '|'"); } - if (containControlCharacter(tag)) { + if (ConfigurationManager.getProxyConfig().isEnableControlCharacterCheck() && containControlCharacter(tag)) { throw new GrpcProxyException(Code.ILLEGAL_MESSAGE_TAG, "tag cannot contain control character"); } } diff --git a/proxy/src/main/java/org/apache/rocketmq/proxy/grpc/v2/producer/SendMessageActivity.java b/proxy/src/main/java/org/apache/rocketmq/proxy/grpc/v2/producer/SendMessageActivity.java index f7b8014bb99..5776b686aeb 100644 --- a/proxy/src/main/java/org/apache/rocketmq/proxy/grpc/v2/producer/SendMessageActivity.java +++ b/proxy/src/main/java/org/apache/rocketmq/proxy/grpc/v2/producer/SendMessageActivity.java @@ -151,7 +151,7 @@ protected void validateMessageKey(String key) { if (StringUtils.isBlank(key)) { throw new GrpcProxyException(Code.ILLEGAL_MESSAGE_KEY, "key cannot be the char sequence of whitespace"); } - if (GrpcValidator.getInstance().containControlCharacter(key)) { + if (ConfigurationManager.getProxyConfig().isEnableControlCharacterCheck() && GrpcValidator.getInstance().containControlCharacter(key)) { throw new GrpcProxyException(Code.ILLEGAL_MESSAGE_KEY, "key cannot contain control character"); } } @@ -169,7 +169,7 @@ protected void validateMessageGroup(String messageGroup) { if (messageGroup.getBytes(StandardCharsets.UTF_8).length >= maxSize) { throw new GrpcProxyException(Code.ILLEGAL_MESSAGE_GROUP, "message group exceed the max size " + maxSize); } - if (GrpcValidator.getInstance().containControlCharacter(messageGroup)) { + if (ConfigurationManager.getProxyConfig().isEnableControlCharacterCheck() && GrpcValidator.getInstance().containControlCharacter(messageGroup)) { throw new GrpcProxyException(Code.ILLEGAL_MESSAGE_GROUP, "message group cannot contain control character"); } } @@ -208,10 +208,10 @@ protected Map buildMessageProperty(ProxyContext context, apache. if (MessageConst.STRING_HASH_SET.contains(userPropertiesEntry.getKey())) { throw new GrpcProxyException(Code.ILLEGAL_MESSAGE_PROPERTY_KEY, "property is used by system: " + userPropertiesEntry.getKey()); } - if (GrpcValidator.getInstance().containControlCharacter(userPropertiesEntry.getKey())) { + if (ConfigurationManager.getProxyConfig().isEnableControlCharacterCheck() && GrpcValidator.getInstance().containControlCharacter(userPropertiesEntry.getKey())) { throw new GrpcProxyException(Code.ILLEGAL_MESSAGE_PROPERTY_KEY, "the key of property cannot contain control character"); } - if (GrpcValidator.getInstance().containControlCharacter(userPropertiesEntry.getValue())) { + if (ConfigurationManager.getProxyConfig().isEnableControlCharacterCheck() && GrpcValidator.getInstance().containControlCharacter(userPropertiesEntry.getValue())) { throw new GrpcProxyException(Code.ILLEGAL_MESSAGE_PROPERTY_KEY, "the value of property cannot contain control character"); } userPropertySize += userPropertiesEntry.getKey().getBytes(StandardCharsets.UTF_8).length;