diff --git a/core/src/main/java/org/springframework/security/util/matcher/InetAddressMatchers.java b/core/src/main/java/org/springframework/security/util/matcher/InetAddressMatchers.java index dbe4e7be65..6ba23ff4f5 100644 --- a/core/src/main/java/org/springframework/security/util/matcher/InetAddressMatchers.java +++ b/core/src/main/java/org/springframework/security/util/matcher/InetAddressMatchers.java @@ -259,7 +259,9 @@ public final class InetAddressMatchers { if (address.isLoopbackAddress() || address.isLinkLocalAddress() || address.isSiteLocalAddress()) { return true; } - + if (address.isAnyLocalAddress()) { + return true; + } byte[] rawAddress = address.getAddress(); if (rawAddress.length == 16) { diff --git a/core/src/test/java/org/springframework/security/util/matcher/InetAddressMatchersTests.java b/core/src/test/java/org/springframework/security/util/matcher/InetAddressMatchersTests.java index 387af3c381..9eb960a3b0 100644 --- a/core/src/test/java/org/springframework/security/util/matcher/InetAddressMatchersTests.java +++ b/core/src/test/java/org/springframework/security/util/matcher/InetAddressMatchersTests.java @@ -276,16 +276,17 @@ class InetAddressMatchersTests { } @ParameterizedTest - @ValueSource(strings = { "127.0.0.1", "127.0.0.255" }) + @ValueSource(strings = { "127.0.0.1", "127.0.0.255", "0.0.0.0" }) void matchesWhenIpv4LoopbackThenReturnsTrue(String address) throws Exception { InetAddressMatcher matcher = InetAddressMatchers.matchInternal().build(); assertThat(matcher.matches(InetAddress.getByName(address))).isTrue(); } - @Test - void matchesWhenIpv6LoopbackThenReturnsTrue() throws Exception { + @ParameterizedTest + @ValueSource(strings = { "::1", "::" }) + void matchesWhenIpv6LoopbackThenReturnsTrue(String address) throws Exception { InetAddressMatcher matcher = InetAddressMatchers.matchInternal().build(); - assertThat(matcher.matches(InetAddress.getByName("::1"))).isTrue(); + assertThat(matcher.matches(InetAddress.getByName(address))).isTrue(); } @ParameterizedTest