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 8a2e6ae KNOX-1948 - If no rules are defined don't rewrite (#121) 8a2e6ae is described below commit 8a2e6ae8570d8affecd7c0915e0402c4f57ba458 Author: Sandeep Moré <m...@apache.org> AuthorDate: Thu Jul 25 17:03:32 2019 -0400 KNOX-1948 - If no rules are defined don't rewrite (#121) --- .../filter/rewrite/i18n/UrlRewriteMessages.java | 3 +++ .../impl/json/JsonUrlRewriteFilterReader.java | 25 ++++++++++++++++------ .../rewrite/api/UrlRewriteServletFilterTest.java | 15 ++++++++++--- 3 files changed, 33 insertions(+), 10 deletions(-) diff --git a/gateway-provider-rewrite/src/main/java/org/apache/knox/gateway/filter/rewrite/i18n/UrlRewriteMessages.java b/gateway-provider-rewrite/src/main/java/org/apache/knox/gateway/filter/rewrite/i18n/UrlRewriteMessages.java index 3c28d55..2de4ccc 100644 --- a/gateway-provider-rewrite/src/main/java/org/apache/knox/gateway/filter/rewrite/i18n/UrlRewriteMessages.java +++ b/gateway-provider-rewrite/src/main/java/org/apache/knox/gateway/filter/rewrite/i18n/UrlRewriteMessages.java @@ -84,4 +84,7 @@ public interface UrlRewriteMessages { @Message( level = MessageLevel.TRACE, text = "Failed to decode query string: {0}" ) void failedToDecodeQueryString( String queryString, @StackTrace(level = MessageLevel.TRACE) Exception exception ); + + @Message( level = MessageLevel.INFO, text = "No rewrite rule was found, skipping rewriting JSON request body" ) + void skippingRewritingJsonRequestBody(); } diff --git a/gateway-provider-rewrite/src/main/java/org/apache/knox/gateway/filter/rewrite/impl/json/JsonUrlRewriteFilterReader.java b/gateway-provider-rewrite/src/main/java/org/apache/knox/gateway/filter/rewrite/impl/json/JsonUrlRewriteFilterReader.java index da6735f..092f73c 100644 --- a/gateway-provider-rewrite/src/main/java/org/apache/knox/gateway/filter/rewrite/impl/json/JsonUrlRewriteFilterReader.java +++ b/gateway-provider-rewrite/src/main/java/org/apache/knox/gateway/filter/rewrite/impl/json/JsonUrlRewriteFilterReader.java @@ -52,14 +52,25 @@ public class JsonUrlRewriteFilterReader extends JsonFilterReader { @Override protected String filterValueString(String name, String value, String rule ) { - try { - Template input = Parser.parseLiteral( value ); - Template output = rewriter.rewrite( resolver, input, direction, rule ); - value = output.getPattern(); - } catch( URISyntaxException e ) { - LOG.failedToParseValueForUrlRewrite( value ); + /* + Prevent inbound JSON payload from getting rewritten + (by picking up best match rewrite rule) when no rule is + specified for the request url. This behavior does not affect outbound + JSON requests and any other rewrite functionality. + */ + if(rule != null || UrlRewriter.Direction.OUT == direction) { + try { + Template input = Parser.parseLiteral( value ); + Template output = rewriter.rewrite( resolver, input, direction, rule ); + value = output.getPattern(); + } catch( URISyntaxException e ) { + LOG.failedToParseValueForUrlRewrite( value ); + } + return value; + } else { + LOG.skippingRewritingJsonRequestBody(); + return value; } - return value; } } diff --git a/gateway-provider-rewrite/src/test/java/org/apache/knox/gateway/filter/rewrite/api/UrlRewriteServletFilterTest.java b/gateway-provider-rewrite/src/test/java/org/apache/knox/gateway/filter/rewrite/api/UrlRewriteServletFilterTest.java index 93015ad..e42ab48 100644 --- a/gateway-provider-rewrite/src/test/java/org/apache/knox/gateway/filter/rewrite/api/UrlRewriteServletFilterTest.java +++ b/gateway-provider-rewrite/src/test/java/org/apache/knox/gateway/filter/rewrite/api/UrlRewriteServletFilterTest.java @@ -234,18 +234,23 @@ public class UrlRewriteServletFilterTest { // fail( "TODO" ); // } + /** + * If no rewrite rule is defined for inbound request skip rewriting + * JSON Body. + * @throws Exception + */ @Test public void testInboundJsonBodyRewrite() throws Exception { testSetUp( null ); String inputJson = "{\"url\":\"http://mock-host:1/test-input-path\"}"; - String outputJson = "{\"url\":\"http://mock-host:1/test-output-path-1\"}"; // Setup the server side request/response interaction. interaction.expect() .method( "PUT" ) .requestUrl( "http://mock-host:1/test-output-path-1" ) - .content( outputJson, StandardCharsets.UTF_8 ); + // Make sure nothing changed in the payload since no rule for payload was specified + .content( inputJson, StandardCharsets.UTF_8 ); interaction.respond() .status( 200 ); interactions.add( interaction ); @@ -258,7 +263,6 @@ public class UrlRewriteServletFilterTest { // Execute the request. response = TestUtils.execute( server, request ); - // Test the results. assertThat( response.getStatus(), is( 200 ) ); } @@ -457,6 +461,11 @@ public class UrlRewriteServletFilterTest { // fail( "TODO" ); // } + /** + * Example test case where inbound rule is specified to rewrite + * request body. + * @throws Exception + */ @Test public void testRequestJsonBodyRewriteWithFilterInitParam() throws Exception { Map<String,String> initParams = new HashMap<>();