首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Spring Boot2 (w/ WebFlux)中为HTTP和HTTPS配置两个端口?

如何在Spring Boot2 (w/ WebFlux)中为HTTP和HTTPS配置两个端口?
EN

Stack Overflow用户
提问于 2018-01-12 15:05:16
回答 3查看 4.2K关注 0票数 5

谁能告诉我当使用Spring Boot2和WebFlux时,如何配置2个端口(用于HTTP和HTTPS)?任何提示都是值得感谢的!

EN

回答 3

Stack Overflow用户

发布于 2018-08-31 05:34:04

这个isn't directly supported by Spring Boot 2 yet

但是,你可以通过几种方式让它工作。

默认情况下,Spring Boot WebFlux使用Netty。如果您已经配置了for ssl,那么Spring Boot将启动并打开端口8443 (或您已配置的任何端口)。

然后,要添加8080,您可以执行以下操作:

@Autowired
HttpHandler httpHandler;

WebServer http;

@PostConstruct
public void start() {
    ReactiveWebServerFactory factory = new NettyReactiveWebServerFactory(8080);
    this.http = factory.getWebServer(this.httpHandler);
    this.http.start();
}

@PreDestroy
public void stop() {
    this.http.stop();
}

这有点笨拙,因为您的https配置在一个点(application.yml)中,而您的http配置在Java config中,但我自己用一个玩具应用程序测试了这一点。不过,我不确定它的解决方案有多健壮。

另一个可能可行的选择是尝试其他建议的等价物,但使用类的反应式版本,即TomcatReactiveWebServerFactory。我不知道有什么方法可以为它提供多个连接器,但您可以覆盖它的getWebServer方法:

@Bean
TomcatReactiveWebServerFactory twoPorts() {
    return new TomcatReactiveWebServerFactory(8443) {
        @Override
        public WebServer getWebServer(HttpHandler httpHandler) {
           // .. copy lines from parent class
           // .. and add your own Connector, similar to how tutorials describe for servlet-based support
        }
    }
}

此外,有一点混乱,我自己也没有尝试过这种方法。

当然,跟踪the ticket,这样您就可以知道Spring Boot2何时提供官方支持。

票数 9
EN

Stack Overflow用户

发布于 2018-03-08 01:31:29

按照jojo_berlin (here's the link)提供的链接中列出的说明进行操作。使用下面的代码,而不是使用他的EmbeddedTomcatConfiguration类

@Configuration
public class TomcatConfig {

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

    @Bean
    public ConfigurableServletWebServerFactory webServerFactory() {
        TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
        Connector connector = new Connector(TomcatServletWebServerFactory.DEFAULT_PROTOCOL);
        connector.setPort(httpPort);
        factory.addAdditionalTomcatConnectors(connector);

        return factory;
    }
}
票数 1
EN

Stack Overflow用户

发布于 2018-01-12 16:40:26

实际上,您可以定义第二个连接器,如here所述。因此您可以将https连接器定义为默认连接器,并将其定义为附加HTTP连接器

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48221194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档