Skip to content

Commit bd4b386

Browse files
committed
Revise solution for WebFlux JettyRequestUpgradeStrategy
See gh-30344
1 parent c23795a commit bd4b386

File tree

1 file changed

+32
-2
lines changed

1 file changed

+32
-2
lines changed

spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/upgrade/JettyRequestUpgradeStrategy.java

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,15 @@
1616

1717
package org.springframework.web.reactive.socket.server.upgrade;
1818

19+
import java.util.function.Consumer;
1920
import java.util.function.Supplier;
2021

2122
import jakarta.servlet.ServletContext;
2223
import jakarta.servlet.http.HttpServletRequest;
2324
import jakarta.servlet.http.HttpServletResponse;
2425
import org.eclipse.jetty.ee10.websocket.server.JettyWebSocketCreator;
2526
import org.eclipse.jetty.ee10.websocket.server.JettyWebSocketServerContainer;
27+
import org.eclipse.jetty.websocket.api.Configurable;
2628
import reactor.core.publisher.Mono;
2729

2830
import org.springframework.core.io.buffer.DataBufferFactory;
@@ -47,6 +49,24 @@
4749
*/
4850
public class JettyRequestUpgradeStrategy implements RequestUpgradeStrategy {
4951

52+
@Nullable
53+
private Consumer<Configurable> webSocketConfigurer;
54+
55+
@Nullable
56+
private JettyWebSocketServerContainer serverContainer;
57+
58+
59+
/**
60+
* Add a callback to configure WebSocket server parameters on
61+
* {@link JettyWebSocketServerContainer}.
62+
* @since 6.1.0
63+
*/
64+
public void addWebSocketConfigurer(Consumer<Configurable> webSocketConfigurer) {
65+
this.webSocketConfigurer = (this.webSocketConfigurer != null ?
66+
this.webSocketConfigurer.andThen(webSocketConfigurer) : webSocketConfigurer);
67+
}
68+
69+
5070
@Override
5171
public Mono<Void> upgrade(
5272
ServerWebExchange exchange, WebSocketHandler handler,
@@ -76,8 +96,7 @@ public Mono<Void> upgrade(
7696
return adapter;
7797
};
7898

79-
JettyWebSocketServerContainer container = JettyWebSocketServerContainer.getContainer(servletContext);
80-
99+
JettyWebSocketServerContainer container = getWebSocketServerContainer(servletContext);
81100
try {
82101
container.upgrade(webSocketCreator, servletRequest, servletResponse);
83102
}
@@ -89,4 +108,15 @@ public Mono<Void> upgrade(
89108
}));
90109
}
91110

111+
private JettyWebSocketServerContainer getWebSocketServerContainer(ServletContext servletContext) {
112+
if (this.serverContainer == null) {
113+
JettyWebSocketServerContainer container = JettyWebSocketServerContainer.getContainer(servletContext);
114+
if (this.webSocketConfigurer != null) {
115+
this.webSocketConfigurer.accept(container);
116+
}
117+
this.serverContainer = container;
118+
}
119+
return this.serverContainer;
120+
}
121+
92122
}

0 commit comments

Comments
 (0)