Skip to content

Commit

Permalink
Prevent reverse name lookup when configuring Jetty's address
Browse files Browse the repository at this point in the history
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 spring-projectsgh-11889
  • Loading branch information
henrjk authored and wilkinsona committed Feb 2, 2018
1 parent 09a64bc commit 2066fa7
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,8 @@
* @author Eddú Meléndez
* @author Venil Noronha
* @author Henri Kerola
* @author Henrich Krämer
*
* @see #setPort(int)
* @see #setConfigurations(Collection)
* @see JettyEmbeddedServletContainer
Expand Down Expand Up @@ -895,7 +897,7 @@ public AbstractConnector createConnector(Server server, InetSocketAddress addres
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);
Expand Down Expand Up @@ -924,7 +926,7 @@ private static class Jetty9ConnectorFactory implements ConnectorFactory {
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()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -35,6 +36,8 @@
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;
Expand Down Expand Up @@ -114,6 +117,32 @@ public void jettyCustomizations() throws Exception {
}
}

@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();
Expand Down

0 comments on commit 2066fa7

Please sign in to comment.