Support Jetty WebSocket server parameters

Closes gh-30344
This commit is contained in:
rstoyanchev
2023-09-13 09:22:16 +01:00
parent 29e3acc887
commit 1f8913a96c
5 changed files with 85 additions and 59 deletions

View File

@@ -21,12 +21,14 @@ import java.security.Principal;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;
import jakarta.servlet.ServletContext;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.eclipse.jetty.ee10.websocket.server.JettyWebSocketCreator;
import org.eclipse.jetty.ee10.websocket.server.JettyWebSocketServerContainer;
import org.eclipse.jetty.websocket.api.Configurable;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
@@ -34,6 +36,7 @@ import org.springframework.http.server.ServletServerHttpRequest;
import org.springframework.http.server.ServletServerHttpResponse;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
import org.springframework.web.context.ServletContextAware;
import org.springframework.web.socket.WebSocketExtension;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.adapter.jetty.JettyWebSocketHandlerAdapter;
@@ -47,11 +50,15 @@ import org.springframework.web.socket.server.RequestUpgradeStrategy;
* @author Rossen Stoyanchev
* @since 5.3.4
*/
public class JettyRequestUpgradeStrategy implements RequestUpgradeStrategy {
public class JettyRequestUpgradeStrategy implements RequestUpgradeStrategy, ServletContextAware {
private static final String[] SUPPORTED_VERSIONS = new String[] {"13"};
@Nullable
private Consumer<Configurable> webSocketConfigurer;
@Override
public String[] getSupportedVersions() {
return SUPPORTED_VERSIONS;
@@ -62,6 +69,24 @@ public class JettyRequestUpgradeStrategy implements RequestUpgradeStrategy {
return Collections.emptyList();
}
/**
* Add a callback to configure WebSocket server parameters on
* {@link JettyWebSocketServerContainer}.
* @since 6.1.0
*/
public void addWebSocketConfigurer(Consumer<Configurable> webSocketConfigurer) {
this.webSocketConfigurer = (this.webSocketConfigurer != null ?
this.webSocketConfigurer.andThen(webSocketConfigurer) : webSocketConfigurer);
}
@Override
public void setServletContext(ServletContext servletContext) {
JettyWebSocketServerContainer container = JettyWebSocketServerContainer.getContainer(servletContext);
if (container != null && this.webSocketConfigurer != null) {
this.webSocketConfigurer.accept(container);
}
}
@Override
public void upgrade(ServerHttpRequest request, ServerHttpResponse response,