[spring-projects/spring-boot]支持使用 WebFlux 和 Reactor Netty 配置 2 个 HTTP(S) 端口

2024-04-29 301 views
7

它记录了如何使用 Spring WebMVC 的 2 个端口(例如 HTTP 和 HTTPS)。如果有一个 Spring WebFlux 的相应部分就好了。

回答

0

被reactor/reactor-netty阻止#67

8

我对此也感兴趣

2

我还建议将附加连接器功能带回TomcatReactiveWebServerFactory,就像TomcatServletWebServerFactory.

2

@bclozel 这是一个好的解决方案吗?我想绑定两个连接器,http 和 https,并将所有 http 请求重定向到 https?我从以下问题中得到了代码:Spring webflux: 将 http 重定向到 https

@Configuration
public class HttpToHttpsRedirectConfig {
    @PostConstruct
    public void startRedirectServer() {
        NettyReactiveWebServerFactory httpNettyReactiveWebServerFactory = new NettyReactiveWebServerFactory(8080);
        httpNettyReactiveWebServerFactory.getWebServer((request, response) -> {
            URI uri = request.getURI();
            URI httpsUri;
            try {
                httpsUri = new URI("https", uri.getUserInfo(), uri.getHost(), 8443, uri.getPath(), uri.getQuery(), uri.getFragment());
            } catch (URISyntaxException e) {
                return Mono.error(e);
            }
            response.setStatusCode(HttpStatus.MOVED_PERMANENTLY);
            response.getHeaders().setLocation(httpsUri);
            return response.setComplete();
        }).start();
    }
}

ServerHttpSecurity但我还是想知道,它和的方法有什么不同redirectToHttps()

7

这对于 Spring Cloud Gateway 来说非常重要,我想使用 gateway 将 http 重定向到 https

7

另请参阅#17144

5

我也对此感兴趣,我正在寻找一种将 http 请求重定向到同一端口上的 https 的解决方案。我已经使用了redirectToHttps(),但没有运气。在尝试了多种方法之后,我观察到 Netty 服务器本身在启用 https 时不接受 http 请求。我正在使用 spring webflux

9

开业已经过去两年半了,说真的,没人愿意这样做吗?

5

@TalosDx 如果没有人希望这个问题得到支持,这个问题就会被关闭。如上所述,该问题已被reactor/reactor-netty#67 阻止。以满足您需求的速度推进它的最佳方法是为 Reactor Netty 做出贡献。

8

在我看来,我没有足够的经验来修复reactor/reactor-netty#67。虽然我会尝试。

4

最新版本的reactor-netty v1.0.0仍然不支持更多的连接器,需要等待下一个版本。

2

没有解决方法 - Reactor Netty 团队决定不在单个服务器中支持多个端口,而是建议启动多个服务器。幸运的是,Reactor 的不可变服务器配置允许我们复制服务器配置,只需更改端口即可启动多个服务器。

我们现在可以致力于实现该功能,但这是第一个:我们需要启动并跟踪多个服务器实例:这意味着要考虑一些有趣的情况,例如 devtools 重新启动、TLS 配置、指标、正常关闭等。

因此,我将删除“阻止”状态,但我们需要作为一个团队进行讨论,以找出实现这一目标的最佳方法。

3

我们作为一个团队对此进行了讨论,我们认为如果我们想提供此功能,现在还有很多工作要做。我们还认为,支持这一点在某种程度上意味着在其他服务器中复制连接器支持。关于共享 Reactor 资源(我们目前在客户端和服务器之间有共享安排)、开发工具等存在很多问题。

例如,就指标而言,服务器以特定名称发布指标,并且两个服务器无法将指标发布到同一注册表而不相互覆盖。

因此,我们暂时关闭这个问题,因为我们认为这种情况不会很快发生。但我们可以在未来重新考虑这一决定,具体取决于此处列出的挑战和我们的优先事项。

2

目前我们还在期待解决这个问题