From 472b9d1757b96c23adca8bce64857cdb10e89e5a Mon Sep 17 00:00:00 2001 From: Spencer Gibb Date: Wed, 2 Mar 2016 18:25:52 -0700 Subject: [PATCH] Don't run PreDecorationFilter if serviceId already set. fixes gh-695 --- .../zuul/filters/pre/PreDecorationFilter.java | 3 ++- .../zuul/filters/pre/PreDecorationFilterTests.java | 12 ++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/pre/PreDecorationFilter.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/pre/PreDecorationFilter.java index 127d2753..695558f8 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/pre/PreDecorationFilter.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/pre/PreDecorationFilter.java @@ -58,7 +58,8 @@ public class PreDecorationFilter extends ZuulFilter { @Override public boolean shouldFilter() { RequestContext ctx = RequestContext.getCurrentContext(); - return !ctx.containsKey("forward.to"); + return !ctx.containsKey("forward.to") // another filter has already forwarded + && !ctx.containsKey("serviceId"); // another filter has already determined serviceId } @Override diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/pre/PreDecorationFilterTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/pre/PreDecorationFilterTests.java index c98fcc7c..8221c65a 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/pre/PreDecorationFilterTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/pre/PreDecorationFilterTests.java @@ -68,6 +68,18 @@ public class PreDecorationFilterTests { assertEquals("pre", this.filter.filterType()); } + @Test + public void skippedIfServiceIdSet() throws Exception { + RequestContext.getCurrentContext().set("serviceId", "myservice"); + assertEquals(false, this.filter.shouldFilter()); + } + + @Test + public void skippedIfForwardToSet() throws Exception { + RequestContext.getCurrentContext().set("forward.to", "mycontext"); + assertEquals(false, this.filter.shouldFilter()); + } + @Test public void prefixRouteAddsHeader() throws Exception { this.properties.setPrefix("/api");