You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@knox.apache.org by mo...@apache.org on 2019/07/25 21:03:37 UTC

[knox] branch master updated: KNOX-1948 - If no rules are defined don't rewrite (#121)

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é <mo...@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<>();