Commit dc48a901 authored by Henrich Kraemer's avatar Henrich Kraemer Committed by Stephane Nicoll

Prevent reverse name lookup when configuring Jetty's address

Previously, the host on Jetty's connector was configured using the
host address of the InetSocketAddress. This could result in reverse
name resolution that could cause Jetty to bind to a different IP
address than was configured.

This commit updates the configuration code to use the host string
when specifically does not perform reverse name resolution.

See gh-11889
parent 21eb8d89
......@@ -101,6 +101,8 @@ import org.springframework.util.StringUtils;
* @author Eddú Meléndez
* @author Venil Noronha
* @author Henri Kerola
* @author Henrich Krämer
*
* @see #setPort(int)
* @see #setConfigurations(Collection)
* @see JettyEmbeddedServletContainer
......@@ -895,7 +897,7 @@ public class JettyEmbeddedServletContainerFactory
ReflectionUtils.findMethod(connectorClass, "setPort", int.class)
.invoke(connector, address.getPort());
ReflectionUtils.findMethod(connectorClass, "setHost", String.class)
.invoke(connector, address.getHostName());
.invoke(connector, address.getHostString());
if (acceptors > 0) {
ReflectionUtils.findMethod(connectorClass, "setAcceptors", int.class)
.invoke(connector, acceptors);
......@@ -924,7 +926,7 @@ public class JettyEmbeddedServletContainerFactory
public AbstractConnector createConnector(Server server, InetSocketAddress address,
int acceptors, int selectors) {
ServerConnector connector = new ServerConnector(server, acceptors, selectors);
connector.setHost(address.getHostName());
connector.setHost(address.getHostString());
connector.setPort(address.getPort());
for (ConnectionFactory connectionFactory : connector
.getConnectionFactories()) {
......
......@@ -17,6 +17,7 @@
package org.springframework.boot.context.embedded.jetty;
import java.io.IOException;
import java.net.InetAddress;
import java.nio.charset.Charset;
import java.util.Arrays;
import java.util.Locale;
......@@ -35,6 +36,8 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.jasper.servlet.JspServlet;
import org.eclipse.jetty.server.AbstractNetworkConnector;
import org.eclipse.jetty.server.Connector;
import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
......@@ -114,6 +117,32 @@ public class JettyEmbeddedServletContainerFactoryTests
}
}
@Test
public void specificIPAddressNotReverseResolved() throws Exception {
JettyEmbeddedServletContainerFactory factory = getFactory();
final String[] refAncHost = new String[1];
refAncHost[0] = "HostNotSetInAbstractNetworkConnector";
InetAddress lhAddress = InetAddress.getLocalHost();
InetAddress address = InetAddress.getByAddress(lhAddress.getAddress());
// the address should have no host name associated with ith
String expectedHost = address.getHostAddress();
factory.setAddress(address);
factory.addServerCustomizers(server -> {
for (Connector connector : server.getConnectors()) {
if (connector instanceof AbstractNetworkConnector) {
@SuppressWarnings("resource")
AbstractNetworkConnector anc = (AbstractNetworkConnector) connector;
String ancHost = anc.getHost();
refAncHost[0] = ancHost;
break;
}
}
});
this.container = factory
.getEmbeddedServletContainer(exampleServletRegistration());
assertThat(refAncHost[0]).isEqualTo(expectedHost);
}
@Test
public void sessionTimeout() throws Exception {
JettyEmbeddedServletContainerFactory factory = getFactory();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment