一尘不染

如何设置Spring Boot运行HTTPS / HTTP端口

spring-boot

Spring Boot具有一些用于配置Web端口和SSL设置的属性,但是一旦设置了SSL证书,http端口就会变成https端口。

因此,如何使两个端口都在其上运行,例如:同时80和443?

如您所见,只有一个端口的属性,在这种情况下启用了“ server.ssl”,这使得http端口自动被禁用。

##############
### Server ###
##############
server.port=9043
server.session-timeout=1800
server.ssl.key-store=file:///C:/Temp/config/localhost.jks
server.ssl.key-store-password=localhost
server.ssl.key-password=localhost
server.ssl.trust-store=file:///C:/Temp/config/localhost.jks
server.ssl.trust-store-password=localhost

我正在尝试甚至使用Tomcat或Undertow。我将不胜感激!


阅读 478

收藏
2020-05-30

共1个答案

一尘不染

使用属性进行Spring Boot配置,仅允许配置一个连接器。您需要多个连接器,为此,您必须编写一个Configuration类。遵循中的指示

https://docs.spring.io/spring-boot/docs/1.2.3.RELEASE/reference/html/howto-
embedded-servlet-containers.html

您可以在下面找到通过属性配置https的有效示例,然后通过EmbeddedServletContainerCustomizer通过http进行配置

http://izeye.blogspot.com/2015/01/configure-http-and-https-in-spring-
boot.html?showComment=1461632100718#c4988529876932015554554

server:
  port:
    8080
  ssl:
    enabled:
      true
    keyStoreType:
      PKCS12
    key-store:
      /path/to/keystore.p12
    key-store-password:
      password
  http:
    port:
      8079

@Configuration
public class TomcatConfig {

@Value("${server.http.port}")
private int httpPort;

@Bean
public EmbeddedServletContainerCustomizer containerCustomizer() {
    return new EmbeddedServletContainerCustomizer() {
        @Override
        public void customize(ConfigurableEmbeddedServletContainer container) {
            if (container instanceof TomcatEmbeddedServletContainerFactory) {
                TomcatEmbeddedServletContainerFactory containerFactory =
                        (TomcatEmbeddedServletContainerFactory) container;

                Connector connector = new Connector(TomcatEmbeddedServletContainerFactory.DEFAULT_PROTOCOL);
                connector.setPort(httpPort);
                containerFactory.addAdditionalTomcatConnectors(connector);
            }
        }
    };
}
}
2020-05-30