This is an automated email from the ASF dual-hosted git repository.
dockerzhang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/inlong.git
The following commit(s) were added to refs/heads/master by this push:
new a5876c16a0 [INLONG-12088][Audit] Audit routing data source management
supports domain names (#12089)
a5876c16a0 is described below
commit a5876c16a0aad20da85308f4f4ab48191c8126a7
Author: doleyzi <[email protected]>
AuthorDate: Fri Feb 27 17:41:56 2026 +0800
[INLONG-12088][Audit] Audit routing data source management supports domain
names (#12089)
Co-authored-by: doleyzi <[email protected]>
---
.../org/apache/inlong/audit/utils/RouteUtils.java | 26 ++++++-
.../apache/inlong/audit/utils/RouteUtilsTest.java | 91 ++++++++++++++++++++++
2 files changed, 113 insertions(+), 4 deletions(-)
diff --git
a/inlong-audit/audit-common/src/main/java/org/apache/inlong/audit/utils/RouteUtils.java
b/inlong-audit/audit-common/src/main/java/org/apache/inlong/audit/utils/RouteUtils.java
index 67d764e845..10517cce4f 100644
---
a/inlong-audit/audit-common/src/main/java/org/apache/inlong/audit/utils/RouteUtils.java
+++
b/inlong-audit/audit-common/src/main/java/org/apache/inlong/audit/utils/RouteUtils.java
@@ -19,6 +19,9 @@ package org.apache.inlong.audit.utils;
import org.apache.inlong.audit.entity.AuditRoute;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -26,6 +29,10 @@ import java.util.regex.PatternSyntaxException;
public class RouteUtils {
+ private static final Logger LOG =
LoggerFactory.getLogger(RouteUtils.class);
+ private static final Pattern JDBC_ADDRESS_PATTERN =
Pattern.compile("^jdbc:\\w+://([a-zA-Z0-9.-]+):(\\d+)");
+ private static final String HOST_PORT_SEPARATOR = ":";
+
public static boolean isValidRegex(String regex) {
if (regex == null || regex.isEmpty()) {
return false;
@@ -63,14 +70,25 @@ public class RouteUtils {
return false;
}
+ /**
+ * Extracts the host:port address from a JDBC URL.
+ * Both IP addresses and domain names are supported.
+ *
+ * @param jdbcUrl the JDBC URL, e.g. "jdbc:mysql://127.0.0.1:3306/testdb"
+ * or "jdbc:mysql://db.example.com:3306/testdb"
+ * @return host:port string, or null if the URL is null, blank, or does
not match
+ */
public static String extractAddress(String jdbcUrl) {
if (jdbcUrl == null || jdbcUrl.trim().isEmpty()) {
return null;
}
- Pattern pattern = Pattern.compile("^jdbc:\\w+://([\\d\\.]+):(\\d+)");
- Matcher matcher = pattern.matcher(jdbcUrl);
- if (matcher.find()) {
- return matcher.group(1) + ":" + matcher.group(2);
+ try {
+ Matcher matcher = JDBC_ADDRESS_PATTERN.matcher(jdbcUrl);
+ if (matcher.find()) {
+ return matcher.group(1) + HOST_PORT_SEPARATOR +
matcher.group(2);
+ }
+ } catch (Exception e) {
+ LOG.warn("Failed to extract address from JDBC URL: {}", jdbcUrl,
e);
}
return null;
}
diff --git
a/inlong-audit/audit-common/src/test/java/org/apache/inlong/audit/utils/RouteUtilsTest.java
b/inlong-audit/audit-common/src/test/java/org/apache/inlong/audit/utils/RouteUtilsTest.java
index f45b1631ca..5b1055bb95 100644
---
a/inlong-audit/audit-common/src/test/java/org/apache/inlong/audit/utils/RouteUtilsTest.java
+++
b/inlong-audit/audit-common/src/test/java/org/apache/inlong/audit/utils/RouteUtilsTest.java
@@ -72,6 +72,34 @@ public class RouteUtilsTest {
assertEquals("192.168.1.100:5432", result);
}
+ @Test
+ public void extractAddress_ValidJdbcUrlWithLocalhost() {
+ String jdbcUrl = "jdbc:mysql://localhost:3306/testdb";
+ String result = RouteUtils.extractAddress(jdbcUrl);
+ assertEquals("localhost:3306", result);
+ }
+
+ @Test
+ public void extractAddress_ValidJdbcUrlWithDomainName() {
+ String jdbcUrl = "jdbc:mysql://db.example.com:3306/testdb";
+ String result = RouteUtils.extractAddress(jdbcUrl);
+ assertEquals("db.example.com:3306", result);
+ }
+
+ @Test
+ public void extractAddress_ValidJdbcUrlWithMultiLevelSubdomain() {
+ String jdbcUrl = "jdbc:postgresql://mysql.db.example.com:5432/mydb";
+ String result = RouteUtils.extractAddress(jdbcUrl);
+ assertEquals("mysql.db.example.com:5432", result);
+ }
+
+ @Test
+ public void extractAddress_ValidJdbcUrlWithHyphenatedDomain() {
+ String jdbcUrl = "jdbc:mysql://my-db-server.example.com:3306/testdb";
+ String result = RouteUtils.extractAddress(jdbcUrl);
+ assertEquals("my-db-server.example.com:3306", result);
+ }
+
@Test
public void matchesAuditRoute_EmptyAuditRouteList() {
List<AuditRoute> auditRouteList = new ArrayList<>();
@@ -181,4 +209,67 @@ public class RouteUtilsTest {
result = RouteUtils.matchesAuditRoute("1", "groupIdABC",
auditRouteList);
assertFalse(result);
}
+
+ @Test
+ public void extractAddress_DomainStartingWithHyphen() {
+ String jdbcUrl = "jdbc:mysql://-invalid.example.com:3306/testdb";
+ String result = RouteUtils.extractAddress(jdbcUrl);
+ assertEquals("-invalid.example.com:3306", result);
+ }
+
+ @Test
+ public void extractAddress_DomainEndingWithHyphen() {
+ String jdbcUrl = "jdbc:mysql://invalid-.example.com:3306/testdb";
+ String result = RouteUtils.extractAddress(jdbcUrl);
+ assertEquals("invalid-.example.com:3306", result);
+ }
+
+ @Test
+ public void extractAddress_DomainStartingWithDot() {
+ String jdbcUrl = "jdbc:mysql://.invalid.com:3306/testdb";
+ String result = RouteUtils.extractAddress(jdbcUrl);
+ assertEquals(".invalid.com:3306", result);
+ }
+
+ @Test
+ public void extractAddress_DomainEndingWithDot() {
+ String jdbcUrl = "jdbc:mysql://invalid.com.:3306/testdb";
+ String result = RouteUtils.extractAddress(jdbcUrl);
+ assertEquals("invalid.com.:3306", result);
+ }
+
+ @Test
+ public void extractAddress_JdbcUrlWithQueryParameters() {
+ String jdbcUrl =
"jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC";
+ String result = RouteUtils.extractAddress(jdbcUrl);
+ assertEquals("localhost:3306", result);
+ }
+
+ @Test
+ public void extractAddress_JdbcUrlWithQueryParametersAndDomain() {
+ String jdbcUrl =
"jdbc:mysql://db.example.com:3306/testdb?useSSL=false&characterEncoding=utf8";
+ String result = RouteUtils.extractAddress(jdbcUrl);
+ assertEquals("db.example.com:3306", result);
+ }
+
+ @Test
+ public void extractAddress_IPv6Address_ReturnsNull() {
+ String jdbcUrl = "jdbc:mysql://[::1]:3306/testdb";
+ String result = RouteUtils.extractAddress(jdbcUrl);
+ assertNull(result);
+ }
+
+ @Test
+ public void extractAddress_IPv6FullAddress_ReturnsNull() {
+ String jdbcUrl =
"jdbc:mysql://[2001:db8:85a3::8a2e:370:7334]:3306/testdb";
+ String result = RouteUtils.extractAddress(jdbcUrl);
+ assertNull(result);
+ }
+
+ @Test
+ public void extractAddress_DomainWithUnderscore_ReturnsNull() {
+ String jdbcUrl = "jdbc:mysql://my_server.example.com:3306/testdb";
+ String result = RouteUtils.extractAddress(jdbcUrl);
+ assertNull(result);
+ }
}