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<>();