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