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é <[email protected]>
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));
}
}