From c366ddaca0af4bb05a2cd261271479ac7c5699f8 Mon Sep 17 00:00:00 2001 From: Brian Clozel Date: Fri, 13 Mar 2026 16:45:43 +0100 Subject: [PATCH] Avoid duplicate RSocket endpoint for WebSocket Prior to this commit, choosing a "websocket" transport for your RSocket endpoint with `spring.rsocket.server.port` would not only expose the endpoint on that specific port, but also on the main server. This commit refines the auto-configuration condition to only add a route on the main server if the separate port is not chosen. Fixes gh-49592 --- .../rsocket/RSocketServerAutoConfiguration.java | 2 +- .../rsocket/RSocketServerAutoConfigurationTests.java | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/rsocket/RSocketServerAutoConfiguration.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/rsocket/RSocketServerAutoConfiguration.java index 76201e6cc7f..72bddffbc5f 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/rsocket/RSocketServerAutoConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/rsocket/RSocketServerAutoConfiguration.java @@ -148,7 +148,7 @@ public class RSocketServerAutoConfiguration { } - @ConditionalOnProperty(name = "spring.rsocket.server.port", matchIfMissing = true) + @ConditionalOnProperty(name = "spring.rsocket.server.port", havingValue = "false", matchIfMissing = true) static class HasNoPortConfigured { } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/rsocket/RSocketServerAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/rsocket/RSocketServerAutoConfigurationTests.java index 8af00918d22..04ae67608d9 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/rsocket/RSocketServerAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/rsocket/RSocketServerAutoConfigurationTests.java @@ -84,6 +84,17 @@ class RSocketServerAutoConfigurationTests { .run((context) -> assertThat(context).hasSingleBean(RSocketWebSocketNettyRouteProvider.class)); } + @Test + void shouldNotCreateWebSocketRouteProviderWhenDedicatedPortIsSet() { + reactiveWebContextRunner() + .withPropertyValues("spring.rsocket.server.port=0", "spring.rsocket.server.transport=websocket", + "spring.rsocket.server.mapping-path=/rsocket") + .run((context) -> { + assertThat(context).hasSingleBean(RSocketServerFactory.class); + assertThat(context).doesNotHaveBean(RSocketWebSocketNettyRouteProvider.class); + }); + } + @Test void shouldCreateDefaultBeansForRSocketServerWhenPortIsSet() { reactiveWebContextRunner().withPropertyValues("spring.rsocket.server.port=0")