Fix issue with forward:... routes

We have to ensure that the ZuulController is not mapped on a
forward otherwise we just go back through the same code
path and render nothing.
This commit is contained in:
Dave Syer
2015-10-20 06:44:01 -04:00
parent 6d5591020d
commit 1fe28af3f0
4 changed files with 12 additions and 4 deletions

View File

@@ -29,11 +29,11 @@ import org.springframework.cloud.netflix.zuul.filters.RouteLocator;
import org.springframework.cloud.netflix.zuul.filters.SimpleRouteLocator;
import org.springframework.cloud.netflix.zuul.filters.ZuulProperties;
import org.springframework.cloud.netflix.zuul.filters.post.SendErrorFilter;
import org.springframework.cloud.netflix.zuul.filters.post.SendForwardFilter;
import org.springframework.cloud.netflix.zuul.filters.post.SendResponseFilter;
import org.springframework.cloud.netflix.zuul.filters.pre.DebugFilter;
import org.springframework.cloud.netflix.zuul.filters.pre.FormBodyWrapperFilter;
import org.springframework.cloud.netflix.zuul.filters.pre.Servlet30WrapperFilter;
import org.springframework.cloud.netflix.zuul.filters.route.SendForwardFilter;
import org.springframework.cloud.netflix.zuul.web.ZuulController;
import org.springframework.cloud.netflix.zuul.web.ZuulHandlerMapping;
import org.springframework.context.ApplicationEvent;

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package org.springframework.cloud.netflix.zuul.filters.post;
package org.springframework.cloud.netflix.zuul.filters.route;
import javax.servlet.RequestDispatcher;
@@ -32,12 +32,12 @@ public class SendForwardFilter extends ZuulFilter {
@Override
public String filterType() {
return "post";
return "route";
}
@Override
public int filterOrder() {
return 2000;
return 500;
}
@Override
@@ -57,6 +57,7 @@ public class SendForwardFilter extends ZuulFilter {
ctx.set(SEND_FORWARD_FILTER_RAN, true);
if (!ctx.getResponse().isCommitted()) {
dispatcher.forward(ctx.getRequest(), ctx.getResponse());
ctx.getResponse().flushBuffer();
}
}
}

View File

@@ -25,6 +25,8 @@ import org.springframework.cloud.netflix.zuul.filters.RouteLocator;
import org.springframework.util.PatternMatchUtils;
import org.springframework.web.servlet.handler.AbstractUrlHandlerMapping;
import com.netflix.zuul.context.RequestContext;
/**
* MVC HandlerMapping that maps incoming request paths to remote services.
*
@@ -60,6 +62,10 @@ public class ZuulHandlerMapping extends AbstractUrlHandlerMapping {
if (PatternMatchUtils.simpleMatch(ignored, urlPath)) {
return null;
}
RequestContext ctx = RequestContext.getCurrentContext();
if (ctx.containsKey("forward.to")) {
return null;
}
return super.lookupHandler(urlPath, request);
}

View File

@@ -23,6 +23,7 @@ import javax.servlet.http.HttpServletRequest;
import org.junit.After;
import org.junit.Test;
import org.springframework.cloud.netflix.zuul.filters.route.SendForwardFilter;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;