16
16
17
17
package org .springframework .web .reactive .socket .server .upgrade ;
18
18
19
+ import java .util .function .Consumer ;
19
20
import java .util .function .Supplier ;
20
21
21
22
import jakarta .servlet .ServletContext ;
22
23
import jakarta .servlet .http .HttpServletRequest ;
23
24
import jakarta .servlet .http .HttpServletResponse ;
24
25
import org .eclipse .jetty .ee10 .websocket .server .JettyWebSocketCreator ;
25
26
import org .eclipse .jetty .ee10 .websocket .server .JettyWebSocketServerContainer ;
27
+ import org .eclipse .jetty .websocket .api .Configurable ;
26
28
import reactor .core .publisher .Mono ;
27
29
28
30
import org .springframework .core .io .buffer .DataBufferFactory ;
47
49
*/
48
50
public class JettyRequestUpgradeStrategy implements RequestUpgradeStrategy {
49
51
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
+
50
70
@ Override
51
71
public Mono <Void > upgrade (
52
72
ServerWebExchange exchange , WebSocketHandler handler ,
@@ -76,8 +96,7 @@ public Mono<Void> upgrade(
76
96
return adapter ;
77
97
};
78
98
79
- JettyWebSocketServerContainer container = JettyWebSocketServerContainer .getContainer (servletContext );
80
-
99
+ JettyWebSocketServerContainer container = getWebSocketServerContainer (servletContext );
81
100
try {
82
101
container .upgrade (webSocketCreator , servletRequest , servletResponse );
83
102
}
@@ -89,4 +108,15 @@ public Mono<Void> upgrade(
89
108
}));
90
109
}
91
110
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
+
92
122
}
0 commit comments