tomcat - 同时使用 SSL 和未加密运行 Spring Boot 应用程序(嵌入式 Tomcat)

标签 tomcat ssl spring-boot tomcat8

有没有一种方法可以运行 Spring Boot 应用程序(可运行的 war),以便它监听两个端口 - 一个带有 SSL,一个没有 SSL。我使用的是嵌入式 Tomcat 8。

当前正在使用 SSL 配置

@Bean
@Profile('tls')
EmbeddedServletContainerCustomizer servletContainerCustomizer ()
throws Exception {

    new EmbeddedServletContainerCustomizer () {
        @Override
        public void customize (ConfigurableEmbeddedServletContainer container) {
            TomcatEmbeddedServletContainerFactory tomcat = (TomcatEmbeddedServletContainerFactory) container
            tomcat.addConnectorCustomizers (
                    new TomcatConnectorCustomizer () {
                        @Override
                        public void customize (Connector connector) {
                            connector.setPort     (Integer.parseInt (retrieveRequiredSpringProperty ('ssl.connection.port')))
                            connector.setSecure   (true)
                            connector.setScheme   ('https')
                            connector.setProtocol (retrieveSpringPropertyOrSpecified ('ssl.connection.protocol', 'HTTP/1.1'))

                            Http11NioProtocol proto = (Http11NioProtocol) connector.getProtocolHandler ()
                            proto.setSSLEnabled   (true)
                            proto.setKeystoreFile (retrieveRequiredSpringProperty ('ssl.protocol.keystore.file'))
                            proto.setKeystorePass (retrieveRequiredSpringProperty ('ssl.protocol.keystore.password'))
                            proto.setKeyPass      (retrieveSpringPropertyOrSpecified ('ssl.protocol.keystore.cert.password', null))
                            proto.setKeystoreType ('JKS')
                            proto.setKeyAlias     (retrieveRequiredSpringProperty ('ssl.protocol.keystore.cert.name'))
                            proto.setSslProtocol  ('TLS')
                            proto.setClientAuth   ('false')
                        }
                    }
            )
        }
    }
}

我尝试使用多个 TomcatConnectorCustomizer,但列出的最后一个似乎是覆盖而不是附加。

一如既往地欢迎任何建议!

最佳答案

TomcatConnectorCustomizer 仅修改现有的Connector(名称中的线索)。要添加其他连接器,您只需要一个不同的 API(例如 here ),例如(从示例复制):

@Bean
public EmbeddedServletContainerFactory servletContainer() {
    TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();
    tomcat.addAdditionalTomcatConnectors(createConnector());
    return tomcat;
}

关于tomcat - 同时使用 SSL 和未加密运行 Spring Boot 应用程序(嵌入式 Tomcat),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26618377/

相关文章:

jsp - ${ myObj.getDescription() } 不返回任何东西

java - 无法进入我的 spring boot Controller 方法

java - 在 Tomcat JVM 参数中为 JSTL 设置语言环境以进行测试?

java - 嵌套关系实体中传递的空值 - Spring Boot

spring-boot - Kotlin Spring Boot Webflux 使用 @Valid 注解验证 @RequestBody

maven - 仅包括用于故障安全(集成测试)的测试测试组,但将它们排除在 surefire 之外

java - Tomcat 似乎无法释放线程

php - 使用 SSL (WSS) 的 Websocket PHP 服务器

wcf - 不使用 IIS 的 WCF 服务上的证书

ios - Apple Push Notification 服务服务器证书更新