From 1f083df6beb0d3dfcae90b6e350b4731143b9603 Mon Sep 17 00:00:00 2001 From: itxaiohanglover <1531137510@qq.com> Date: Mon, 6 Jul 2026 10:10:53 +0800 Subject: [PATCH] [ISSUE #407] Support wildcard IPs in ACL whitelist IPAddressUtils.isIPInRange did not recognize 0.0.0.0, ::, or * as wildcard addresses. When a user configured 0.0.0.0 in the ACL IP whitelist, it only matched the exact IP 0.0.0.0 instead of all IPs. Add support for: - 0.0.0.0 and 0.0.0.0/0: match any IPv4 address - :: and ::/0: match any IPv6 address - *: match any address Added test cases for all wildcard patterns. --- .../apache/rocketmq/common/utils/IPAddressUtils.java | 5 +++++ .../rocketmq/common/utils/IPAddressUtilsTest.java | 11 +++++++++++ 2 files changed, 16 insertions(+) diff --git a/common/src/main/java/org/apache/rocketmq/common/utils/IPAddressUtils.java b/common/src/main/java/org/apache/rocketmq/common/utils/IPAddressUtils.java index 5133219d9cd..925c8de9f4c 100644 --- a/common/src/main/java/org/apache/rocketmq/common/utils/IPAddressUtils.java +++ b/common/src/main/java/org/apache/rocketmq/common/utils/IPAddressUtils.java @@ -83,6 +83,11 @@ public static boolean isValidIPv6Cidr(String cidr) { public static boolean isIPInRange(String ip, String cidr) { try { + if (StringUtils.equals(cidr, "*") || StringUtils.equals(cidr, "0.0.0.0") + || StringUtils.equals(cidr, "0.0.0.0/0") || StringUtils.equals(cidr, "::") + || StringUtils.equals(cidr, "::/0")) { + return true; + } String[] parts = cidr.split(SLASH); if (parts.length == 1) { return StringUtils.equals(ip, cidr); diff --git a/common/src/test/java/org/apache/rocketmq/common/utils/IPAddressUtilsTest.java b/common/src/test/java/org/apache/rocketmq/common/utils/IPAddressUtilsTest.java index 7830bc3aed6..071cf6e2015 100644 --- a/common/src/test/java/org/apache/rocketmq/common/utils/IPAddressUtilsTest.java +++ b/common/src/test/java/org/apache/rocketmq/common/utils/IPAddressUtilsTest.java @@ -39,6 +39,17 @@ public void isIPInRange() { assert IPAddressUtils.isIPInRange(ipv6Address, ipv6Cidr); } + @Test + public void isIPInRangeWildcard() { + assert IPAddressUtils.isIPInRange("192.168.1.10", "0.0.0.0"); + assert IPAddressUtils.isIPInRange("10.0.0.1", "0.0.0.0/0"); + assert IPAddressUtils.isIPInRange("192.168.1.10", "*"); + assert IPAddressUtils.isIPInRange("2001:0db8:85a3::8a2e:0370:7334", "::"); + assert IPAddressUtils.isIPInRange("2001:0db8:85a3::8a2e:0370:7334", "::/0"); + assert IPAddressUtils.isIPInRange("192.168.1.10", "::/0"); + assert IPAddressUtils.isIPInRange("2001:0db8::1", "0.0.0.0/0"); + } + @Test public void isValidCidr() { String ipv4Cidr = "192.168.1.0/24";