This is an automated email from the ASF dual-hosted git repository. more pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/knox.git
The following commit(s) were added to refs/heads/master by this push: new 1a7d05e KNOX-1361 Fix issues when proxying websockets via socket.io (#386) 1a7d05e is described below commit 1a7d05efd95b41edd370abde9b2a0e2093c9f293 Author: Sandeep Moré <moresand...@gmail.com> AuthorDate: Mon Nov 23 13:08:29 2020 -0500 KNOX-1361 Fix issues when proxying websockets via socket.io (#386) --- .../knox/gateway/websockets/GatewayWebsocketHandler.java | 6 ++++++ .../knox/gateway/websockets/WebsocketBackendUrlTest.java | 13 +++++++++++++ .../knox/gateway/websockets/WebsocketEchoTestBase.java | 12 ++++++++---- 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/gateway-server/src/main/java/org/apache/knox/gateway/websockets/GatewayWebsocketHandler.java b/gateway-server/src/main/java/org/apache/knox/gateway/websockets/GatewayWebsocketHandler.java index dfbd9a2..0f8cfa4 100644 --- a/gateway-server/src/main/java/org/apache/knox/gateway/websockets/GatewayWebsocketHandler.java +++ b/gateway-server/src/main/java/org/apache/knox/gateway/websockets/GatewayWebsocketHandler.java @@ -179,6 +179,7 @@ public class GatewayWebsocketHandler extends WebSocketHandler */ protected synchronized String getMatchedBackendURL(final URI requestURI) { final String path = requestURI.getRawPath(); + final String query = requestURI.getRawQuery(); final ServiceRegistry serviceRegistryService = services .getService(ServiceType.SERVICE_REGISTRY_SERVICE); @@ -235,7 +236,12 @@ public class GatewayWebsocketHandler extends WebSocketHandler backend.append(serviceUrl.getPort()).append('/'); backend.append(serviceUrl.getPath()); } + /* in case we have query params */ + if(!StringUtils.isBlank(query)) { + backend.append('?').append(query); + } backendURL = backend.toString(); + } catch (MalformedURLException e){ LOG.badUrlError(e); throw new RuntimeException(e.toString()); diff --git a/gateway-server/src/test/java/org/apache/knox/gateway/websockets/WebsocketBackendUrlTest.java b/gateway-server/src/test/java/org/apache/knox/gateway/websockets/WebsocketBackendUrlTest.java index 2f11c5c..adab585 100644 --- a/gateway-server/src/test/java/org/apache/knox/gateway/websockets/WebsocketBackendUrlTest.java +++ b/gateway-server/src/test/java/org/apache/knox/gateway/websockets/WebsocketBackendUrlTest.java @@ -75,4 +75,17 @@ public class WebsocketBackendUrlTest extends WebsocketEchoTestBase { String expectedBackendUrl = backendServerUri.toString() + "channels"; assertThat(backendUrl, is(expectedBackendUrl)); } + + /* + * Test url generated for websocket backend connection + */ + @Test + public void testWebsocketBackendUrlWithQueryParams() throws Exception { + final String pathContext = "channels?EIO=3&transport=websocket"; + URI requestURI = new URI(String.format(Locale.ROOT, "%sgateway/websocket/123foo456bar/%s",serverUri.toString(), pathContext)); + GatewayWebsocketHandler gwh = new GatewayWebsocketHandler(gatewayConfig, services); + String backendUrl = gwh.getMatchedBackendURL(requestURI); + String expectedBackendUrl = backendServerUri.toString() + pathContext; + assertThat(backendUrl, is(expectedBackendUrl)); + } } diff --git a/gateway-server/src/test/java/org/apache/knox/gateway/websockets/WebsocketEchoTestBase.java b/gateway-server/src/test/java/org/apache/knox/gateway/websockets/WebsocketEchoTestBase.java index 08decd4..5db254f 100644 --- a/gateway-server/src/test/java/org/apache/knox/gateway/websockets/WebsocketEchoTestBase.java +++ b/gateway-server/src/test/java/org/apache/knox/gateway/websockets/WebsocketEchoTestBase.java @@ -113,7 +113,11 @@ public class WebsocketEchoTestBase { } public static void startServers(String type) throws Exception { - startWebsocketServer(type); + startServers(type, "ws"); + } + + public static void startServers(final String type, final String context) throws Exception { + startWebsocketServer(type, context); startGatewayServer(); } @@ -137,7 +141,7 @@ public class WebsocketEchoTestBase { * Start Mock Websocket server that acts as backend. * @throws Exception exception on websocket server start */ - private static void startWebsocketServer(String type) throws Exception { + private static void startWebsocketServer(final String type, final String contextPath) throws Exception { backendServer = new Server(); ServerConnector connector = new ServerConnector(backendServer); @@ -163,9 +167,9 @@ public class WebsocketEchoTestBase { } int port = connector.getLocalPort(); if ("http".equals(type)) { - backendServerUri = new URI(String.format(Locale.ROOT, "http://%s:%d/ws", host, port)); + backendServerUri = new URI(String.format(Locale.ROOT, "http://%s:%d/%s", host, port, contextPath)); } else { - backendServerUri = new URI(String.format(Locale.ROOT, "ws://%s:%d/ws", host, port)); + backendServerUri = new URI(String.format(Locale.ROOT, "ws://%s:%d/%s", host, port, contextPath)); } }