Merge remote-tracking branch 'origin/5.8.x'
Closes gh-12077
This commit is contained in:
commit
d651da5ac3
|
@ -48,7 +48,7 @@ public final class IpAddressServerWebExchangeMatcher implements ServerWebExchang
|
||||||
public Mono<MatchResult> matches(ServerWebExchange exchange) {
|
public Mono<MatchResult> matches(ServerWebExchange exchange) {
|
||||||
// @formatter:off
|
// @formatter:off
|
||||||
return Mono.justOrEmpty(exchange.getRequest().getRemoteAddress())
|
return Mono.justOrEmpty(exchange.getRequest().getRemoteAddress())
|
||||||
.map((remoteAddress) -> remoteAddress.getAddress().getHostAddress())
|
.map((remoteAddress) -> remoteAddress.isUnresolved() ? remoteAddress.getHostString() : remoteAddress.getAddress().getHostAddress())
|
||||||
.map(this.ipAddressMatcher::matches)
|
.map(this.ipAddressMatcher::matches)
|
||||||
.flatMap((matches) -> matches ? MatchResult.match() : MatchResult.notMatch())
|
.flatMap((matches) -> matches ? MatchResult.match() : MatchResult.notMatch())
|
||||||
.switchIfEmpty(MatchResult.notMatch());
|
.switchIfEmpty(MatchResult.notMatch());
|
||||||
|
|
|
@ -101,6 +101,22 @@ public class IpAddressServerWebExchangeMatcherTests {
|
||||||
assertThat(matcher.matches(exchange("192.168.0.159")).block().isMatch()).isTrue();
|
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
|
@Test
|
||||||
public void constructorWhenIpv4AddressMaskTooLongThenIllegalArgumentException() {
|
public void constructorWhenIpv4AddressMaskTooLongThenIllegalArgumentException() {
|
||||||
String ipv4AddressWithTooLongMask = "192.168.1.104/33";
|
String ipv4AddressWithTooLongMask = "192.168.1.104/33";
|
||||||
|
@ -119,8 +135,14 @@ public class IpAddressServerWebExchangeMatcherTests {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static ServerWebExchange exchange(String ipAddress) throws UnknownHostException {
|
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("/")
|
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();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue