Merge remote-tracking branch 'origin/5.8.x'

Closes gh-12077
This commit is contained in:
Josh Cummings 2022-10-24 16:54:03 -06:00
commit d651da5ac3
No known key found for this signature in database
GPG Key ID: A306A51F43B8E5A5
2 changed files with 24 additions and 2 deletions

View File

@ -48,7 +48,7 @@ public final class IpAddressServerWebExchangeMatcher implements ServerWebExchang
public Mono<MatchResult> matches(ServerWebExchange exchange) {
// @formatter:off
return Mono.justOrEmpty(exchange.getRequest().getRemoteAddress())
.map((remoteAddress) -> remoteAddress.getAddress().getHostAddress())
.map((remoteAddress) -> remoteAddress.isUnresolved() ? remoteAddress.getHostString() : remoteAddress.getAddress().getHostAddress())
.map(this.ipAddressMatcher::matches)
.flatMap((matches) -> matches ? MatchResult.match() : MatchResult.notMatch())
.switchIfEmpty(MatchResult.notMatch());

View File

@ -101,6 +101,22 @@ public class IpAddressServerWebExchangeMatcherTests {
assertThat(matcher.matches(exchange("192.168.0.159")).block().isMatch()).isTrue();
}
@Test
public void matchesWhenIpv4UnresolvedThenTrue() throws UnknownHostException {
ServerWebExchange ipv4Exchange = exchange("192.168.1.104", true);
ServerWebExchangeMatcher.MatchResult matches = new IpAddressServerWebExchangeMatcher("192.168.1.104")
.matches(ipv4Exchange).block();
assertThat(matches.isMatch()).isTrue();
}
@Test
public void matchesWhenIpv6UnresolvedThenTrue() throws UnknownHostException {
ServerWebExchange ipv6Exchange = exchange("fe80::21f:5bff:fe33:bd68", true);
ServerWebExchangeMatcher.MatchResult matches = new IpAddressServerWebExchangeMatcher("fe80::21f:5bff:fe33:bd68")
.matches(ipv6Exchange).block();
assertThat(matches.isMatch()).isTrue();
}
@Test
public void constructorWhenIpv4AddressMaskTooLongThenIllegalArgumentException() {
String ipv4AddressWithTooLongMask = "192.168.1.104/33";
@ -119,8 +135,14 @@ public class IpAddressServerWebExchangeMatcherTests {
}
private static ServerWebExchange exchange(String ipAddress) throws UnknownHostException {
return exchange(ipAddress, false);
}
private static ServerWebExchange exchange(String ipAddress, boolean unresolved) throws UnknownHostException {
return MockServerWebExchange.builder(MockServerHttpRequest.get("/")
.remoteAddress(new InetSocketAddress(InetAddress.getByName(ipAddress), 8080))).build();
.remoteAddress(unresolved ? InetSocketAddress.createUnresolved(ipAddress, 8080)
: new InetSocketAddress(InetAddress.getByName(ipAddress), 8080)))
.build();
}
}