diff --git a/jetty-rewrite/src/main/java/org/eclipse/jetty/rewrite/handler/CompactPathRule.java b/jetty-rewrite/src/main/java/org/eclipse/jetty/rewrite/handler/CompactPathRule.java index a0441cac259f..d76892698f02 100644 --- a/jetty-rewrite/src/main/java/org/eclipse/jetty/rewrite/handler/CompactPathRule.java +++ b/jetty-rewrite/src/main/java/org/eclipse/jetty/rewrite/handler/CompactPathRule.java @@ -35,7 +35,7 @@ public CompactPathRule() @Override public void applyURI(Request request, String oldURI, String newURI) throws IOException { - String uri = oldURI; + String uri = request.getHttpURI().getPathQuery(); if (uri.startsWith("/")) uri = URIUtil.compactPath(uri); request.setHttpURI(HttpURI.build(request.getHttpURI(), uri)); diff --git a/jetty-rewrite/src/test/java/org/eclipse/jetty/rewrite/handler/CompactPathRuleTest.java b/jetty-rewrite/src/test/java/org/eclipse/jetty/rewrite/handler/CompactPathRuleTest.java index 66d0c2be73c8..05622693a15d 100644 --- a/jetty-rewrite/src/test/java/org/eclipse/jetty/rewrite/handler/CompactPathRuleTest.java +++ b/jetty-rewrite/src/test/java/org/eclipse/jetty/rewrite/handler/CompactPathRuleTest.java @@ -16,6 +16,7 @@ import java.util.stream.Stream; import org.eclipse.jetty.http.HttpURI; +import org.eclipse.jetty.util.URIUtil; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; @@ -28,20 +29,20 @@ public static Stream scenarios() { return Stream.of( // shouldn't change anything - Arguments.of("/foo", null, "/foo", null), - Arguments.of("/", null, "/", null), + Arguments.of("/foo", null, "/foo", null, "/foo"), + Arguments.of("/", null, "/", null, "/"), // simple compact path - Arguments.of("////foo", null, "/foo", null), + Arguments.of("////foo", null, "/foo", null, "/foo"), // with simple query - Arguments.of("//foo//bar", "a=b", "/foo/bar", "a=b"), + Arguments.of("//foo//bar", "a=b", "/foo/bar", "a=b", "/foo/bar?a=b"), // with query that has double slashes (should preserve slashes in query) - Arguments.of("//foo//bar", "a=b//c", "/foo/bar", "a=b//c") + Arguments.of("//foo//bar", "a=b//c", "/foo/bar", "a=b//c", "/foo/bar?a=b//c") ); } @ParameterizedTest @MethodSource("scenarios") - public void testCompactPathRule(String inputPath, String inputQuery, String expectedPath, String expectedQuery) throws Exception + public void testCompactPathRule(String inputPath, String inputQuery, String expectedPath, String expectedQuery, String expectedPathQuery) throws Exception { start(false); @@ -50,15 +51,16 @@ public void testCompactPathRule(String inputPath, String inputQuery, String expe reset(); _request.setHttpURI(HttpURI.build(_request.getHttpURI(), inputPath, null, inputQuery).asImmutable()); - String result = rule.matchAndApply(_request.getHttpURI().getDecodedPath(), _request, _response); - assertEquals(expectedPath, result); + String target = _request.getHttpURI().getDecodedPath(); - rule.applyURI(_request, _request.getHttpURI().getPathQuery(), result); + String applied = rule.matchAndApply(target, _request, _response); + assertEquals(expectedPath, applied); - if (result != null) - { - assertEquals(expectedPath, _request.getRequestURI()); - assertEquals(expectedQuery, _request.getQueryString()); - } + String encoded = URIUtil.encodePath(applied); + rule.applyURI(_request, _request.getRequestURI(), encoded); + + assertEquals(expectedPath, _request.getRequestURI()); + assertEquals(expectedQuery, _request.getQueryString()); + assertEquals(expectedPathQuery, _request.getHttpURI().getPathQuery()); } }