Fix HttpRequest#getURI() with Netty based engines

Host and port are now properly retrieved from Reactor
Netty and RxNetty (the scheme is not available).

Issue: SPR-14794
This commit is contained in:
Sebastien Deleuze
2016-10-10 23:22:18 +02:00
parent ea5ff87f8e
commit 0cc330e8fc
3 changed files with 81 additions and 2 deletions

View File

@@ -16,6 +16,7 @@
package org.springframework.http.server.reactive;
import java.net.InetSocketAddress;
import java.net.URI;
import java.net.URISyntaxException;
@@ -64,7 +65,16 @@ public class ReactorServerHttpRequest extends AbstractServerHttpRequest {
@Override
protected URI initUri() throws URISyntaxException {
return new URI(this.channel.uri());
URI uri = new URI(this.channel.uri());
InetSocketAddress remoteAddress = this.channel.remoteAddress();
return new URI(
uri.getScheme(),
uri.getUserInfo(),
(remoteAddress != null ? remoteAddress.getHostString() : null),
(remoteAddress != null ? remoteAddress.getPort() : -1),
uri.getPath(),
uri.getQuery(),
uri.getFragment());
}
@Override

View File

@@ -16,6 +16,7 @@
package org.springframework.http.server.reactive;
import java.net.InetSocketAddress;
import java.net.URI;
import java.net.URISyntaxException;
@@ -68,7 +69,17 @@ public class RxNettyServerHttpRequest extends AbstractServerHttpRequest {
@Override
protected URI initUri() throws URISyntaxException {
return new URI(this.request.getUri());
URI uri = new URI(this.request.getUri());
InetSocketAddress remoteAddress = this.getHeaders().getHost();
return new URI(
uri.getScheme(),
uri.getUserInfo(),
(remoteAddress != null ? remoteAddress.getHostString() : null),
(remoteAddress != null ? remoteAddress.getPort() : -1),
uri.getPath(),
uri.getQuery(),
uri.getFragment());
}
@Override