diff --git a/web/src/main/java/org/springframework/security/web/util/matcher/IpAddressMatcher.java b/web/src/main/java/org/springframework/security/web/util/matcher/IpAddressMatcher.java index a235b59dd99..eac48297d2a 100644 --- a/web/src/main/java/org/springframework/security/web/util/matcher/IpAddressMatcher.java +++ b/web/src/main/java/org/springframework/security/web/util/matcher/IpAddressMatcher.java @@ -130,4 +130,11 @@ private InetAddress parseAddress(String address) { } } + @Override + public String toString() { + String hostAddress = this.requiredAddress.getHostAddress(); + return (this.nMaskBits < 0) + ? "IpAddressMatcher[" + hostAddress + "]" + : "IpAddressMatcher[" + hostAddress + "/" + this.nMaskBits + "]"; + } } diff --git a/web/src/test/java/org/springframework/security/web/util/matcher/IpAddressMatcherTests.java b/web/src/test/java/org/springframework/security/web/util/matcher/IpAddressMatcherTests.java index ce702bfbebb..d56f8b1a5df 100644 --- a/web/src/test/java/org/springframework/security/web/util/matcher/IpAddressMatcherTests.java +++ b/web/src/test/java/org/springframework/security/web/util/matcher/IpAddressMatcherTests.java @@ -152,5 +152,24 @@ public void constructorWhenRequiredAddressIsEmptyThenThrowsIllegalArgumentExcept assertThatIllegalArgumentException().isThrownBy(() -> new IpAddressMatcher("")) .withMessage("ipAddress cannot be empty"); } + // gh-16795 + @Test + public void toStringWhenCidrIsProvidedThenReturnsIpAddressWithCidr() { + IpAddressMatcher matcher = new IpAddressMatcher("192.168.1.0/24"); + + String result = matcher.toString(); + + assertThat(result).isEqualTo("IpAddressMatcher[192.168.1.0/24]"); + } + + // gh-16795 + @Test + public void toStringWhenOnlyIpIsProvidedThenReturnsIpAddressOnly() { + IpAddressMatcher matcher = new IpAddressMatcher("127.0.0.1"); + + String result = matcher.toString(); + + assertThat(result).isEqualTo("IpAddressMatcher[127.0.0.1]"); + } }