当前位置: 首页 > 知识库问答 >
问题:

同时运行带有SSL和未加密的Spring Boot应用程序(嵌入式Tomcat)

慕祯
2023-03-14

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

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

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

共有1个答案

公良昕
2023-03-14

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

@Bean
public EmbeddedServletContainerFactory servletContainer() {
    TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();
    tomcat.addAdditionalTomcatConnectors(createConnector());
    return tomcat;
}
 类似资料:
  • 问题内容: 有什么方法可以向正在运行的嵌入式Jetty实例添加处理程序?我们已经将一个旧的基于Jetty 6的项目迁移到了Jetty 9,我们需要为我们的插件系统动态添加和删除处理程序… 请参阅下面的示例… 注意:是… 问题答案: 使用Jetty 9.1.0.v20131115,您可以在构造函数上使用标志… 在和调用期间,这将忽略对集合本身的测试。 此行为仅适用于自身,您可以添加单个处理程序,也可

  • 我有时会在pom中看到以下声明。xml。。。 如您所见,sping-boo-starter-web被声明为tomcat-embed-jasper。 是不是sping-boo-starter-web已经有一个嵌入式tomcat了?为什么一些开发人员仍然声明tomcat-embed-jasper以及boot-starter-web?还是有什么原因?

  • 不幸的是,Twilio文档不够清晰,我无法回答我的问题,所以我在这里。 当我的应用程序在前台/后台运行时,当用户调用时,我能够接收Twilio传入连接,并且我能够正确地处理这一点(在应用程序中显示弹出窗口,或者如果应用程序在后台,则发送本地通知)。 有没有什么办法在app根本不运行的情况下实现Twilio来电呢?我想知道这种情况是否可能: 用户A:关闭已实现Twilio调用的应用程序 用户B:通过

  • Spring Boot有一个方便的特性,如果您配置maven插件,它会将init.d starup脚本嵌入到可执行jar中:http://docs.Spring.io/spring-boot/docs/current/reference/html/deployment-install.html#deployment-install 因此,我正在使用上述方法在CentOS6.6中“安装”一个Spri