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
This commit is contained in:
parent
09a64bc841
commit
2066fa7d0b
|
|
@ -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();
|
||||
|
|
|
|||
Loading…
Reference in New Issue