diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/jetty/JettyReactiveWebServerFactory.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/jetty/JettyReactiveWebServerFactory.java index a78bc404d4a..3ddc655ddcb 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/jetty/JettyReactiveWebServerFactory.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/jetty/JettyReactiveWebServerFactory.java @@ -147,7 +147,7 @@ public class JettyReactiveWebServerFactory extends AbstractReactiveWebServerFact JettyReactiveWebServerFactory.logger .info("Server initialized with port: " + port); if (getSsl() != null && getSsl().isEnabled()) { - customizeSsl(server, port); + customizeSsl(server, address); } for (JettyServerCustomizer customizer : getServerCustomizers()) { customizer.customize(server); @@ -189,8 +189,8 @@ public class JettyReactiveWebServerFactory extends AbstractReactiveWebServerFact return wrapper; } - private void customizeSsl(Server server, int port) { - new SslServerCustomizer(port, getSsl(), getSslStoreProvider(), getHttp2()) + private void customizeSsl(Server server, InetSocketAddress address) { + new SslServerCustomizer(address, getSsl(), getSslStoreProvider(), getHttp2()) .customize(server); } diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/jetty/JettyServletWebServerFactory.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/jetty/JettyServletWebServerFactory.java index cb5697ced87..50a8a4ba6b4 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/jetty/JettyServletWebServerFactory.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/jetty/JettyServletWebServerFactory.java @@ -145,7 +145,7 @@ public class JettyServletWebServerFactory extends AbstractServletWebServerFactor server.setHandler(addHandlerWrappers(context)); this.logger.info("Server initialized with port: " + port); if (getSsl() != null && getSsl().isEnabled()) { - customizeSsl(server, port); + customizeSsl(server, address); } for (JettyServerCustomizer customizer : getServerCustomizers()) { customizer.customize(server); @@ -193,8 +193,8 @@ public class JettyServletWebServerFactory extends AbstractServletWebServerFactor return wrapper; } - private void customizeSsl(Server server, int port) { - new SslServerCustomizer(port, getSsl(), getSslStoreProvider(), getHttp2()) + private void customizeSsl(Server server, InetSocketAddress address) { + new SslServerCustomizer(address, getSsl(), getSslStoreProvider(), getHttp2()) .customize(server); } diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/jetty/SslServerCustomizer.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/jetty/SslServerCustomizer.java index 4f50d006b31..9d1004f3ae7 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/jetty/SslServerCustomizer.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/jetty/SslServerCustomizer.java @@ -17,6 +17,7 @@ package org.springframework.boot.web.embedded.jetty; import java.io.IOException; +import java.net.InetSocketAddress; import java.net.URL; import org.eclipse.jetty.alpn.server.ALPNServerConnectionFactory; @@ -50,7 +51,7 @@ import org.springframework.util.ResourceUtils; */ class SslServerCustomizer implements JettyServerCustomizer { - private final int port; + private final InetSocketAddress address; private final Ssl ssl; @@ -58,9 +59,9 @@ class SslServerCustomizer implements JettyServerCustomizer { private final Http2 http2; - SslServerCustomizer(int port, Ssl ssl, SslStoreProvider sslStoreProvider, - Http2 http2) { - this.port = port; + SslServerCustomizer(InetSocketAddress address, Ssl ssl, + SslStoreProvider sslStoreProvider, Http2 http2) { + this.address = address; this.ssl = ssl; this.sslStoreProvider = sslStoreProvider; this.http2 = http2; @@ -70,20 +71,22 @@ class SslServerCustomizer implements JettyServerCustomizer { public void customize(Server server) { SslContextFactory sslContextFactory = new SslContextFactory(); configureSsl(sslContextFactory, this.ssl, this.sslStoreProvider); - ServerConnector connector = createConnector(server, sslContextFactory, this.port); + ServerConnector connector = createConnector(server, sslContextFactory, + this.address); server.setConnectors(new Connector[] { connector }); } private ServerConnector createConnector(Server server, - SslContextFactory sslContextFactory, int port) { + SslContextFactory sslContextFactory, InetSocketAddress address) { HttpConfiguration config = new HttpConfiguration(); config.setSendServerVersion(false); config.setSecureScheme("https"); - config.setSecurePort(port); + config.setSecurePort(address.getPort()); config.addCustomizer(new SecureRequestCustomizer()); ServerConnector connector = createServerConnector(server, sslContextFactory, config); - connector.setPort(port); + connector.setPort(address.getPort()); + connector.setHost(address.getHostString()); return connector; } diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/embedded/jetty/JettyServletWebServerFactoryTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/embedded/jetty/JettyServletWebServerFactoryTests.java index 1b23bdcf3a3..42a0800c02d 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/embedded/jetty/JettyServletWebServerFactoryTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/embedded/jetty/JettyServletWebServerFactoryTests.java @@ -288,6 +288,24 @@ public class JettyServletWebServerFactoryTests .isEqualTo(localhost.getHostAddress()); } + @Test + public void specificIPAddressWithSslIsNotReverseResolved() throws Exception { + JettyServletWebServerFactory factory = getFactory(); + InetAddress localhost = InetAddress.getLocalHost(); + factory.setAddress(InetAddress.getByAddress(localhost.getAddress())); + Ssl ssl = new Ssl(); + ssl.setKeyStore("src/test/resources/test.jks"); + ssl.setKeyStorePassword("secret"); + ssl.setKeyPassword("password"); + factory.setSsl(ssl); + this.webServer = factory.getWebServer(); + this.webServer.start(); + Connector connector = ((JettyWebServer) this.webServer).getServer() + .getConnectors()[0]; + assertThat(((ServerConnector) connector).getHost()) + .isEqualTo(localhost.getHostAddress()); + } + @Override protected JspServlet getJspServlet() throws Exception { WebAppContext context = (WebAppContext) ((JettyWebServer) this.webServer)