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

标签 java spring spring-boot ssl

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。如有任何帮助,我将不胜感激!

最佳答案

Spring Boot 配置使用属性,只允许配置一个连接器。您需要的是多个连接器,为此,您必须编写一个配置类。按照

中的说明进行操作

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#c4988529876932015554

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);
            }
        }
    };
}
}

关于java - 如何设置 Spring Boot 以运行 HTTPS/HTTP 端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30896234/

相关文章:

找不到 Java 文件,但在同一目录中并且捕获了异常

java - 使用电子邮件、用户名和密码进行 Firebase 身份验证

javascript - JSF Richfaces 自动完成问题 - 使用..anything 发送隐藏参数

java - 静态类需要使用 Spring 托管类

java - 500 Internal Server Error 而不是 Spring Boot 中的 404

java - Spring Boot 自由标记

tomcat - 根据动态字段更改 url

java - 如何验证没有使用 Mockito 调用特定方法?

java - 在 Struts 2 中使用 Ajax 和 Oracle 数据库自动完成文本框

Spring Mongodb 查询(如果 id 不为空)