Naina M
Naina M
Aug 24, 2017 · 1 min read

Hi Mark,

Thanks for this post. I am trying to do the same thing but the request is not getting redirected to the URL specified in the new request object.

Here’s my code:

public class RatioBasedFilter extends ZuulFilter {

private static Logger log = LoggerFactory.getLogger(RatioBasedFilter.class);

private Random random = new Random();

@Override

public String filterType() {

return “pre”;

}

@Override

public int filterOrder() {

return 100;

}

@Override

public boolean shouldFilter() {

return true;

}

@Override

public Object run() {

RequestContext ctx = RequestContext.getCurrentContext();

if (isLegacy()) {

String urlLegacy = UriComponentsBuilder.fromHttpUrl(“http://localhost:8090").path("/available").build()

.toUriString();

log.info(“Redirecting to “ + urlLegacy);

HttpServletRequestWrapper requestWrapper = new HttpServletRequestWrapper(ctx.getRequest()) {

@Override

public String getRequestURI() {

return urlLegacy;

}

@Override

public StringBuffer getRequestURL() {

return new StringBuffer(urlLegacy);

}

};

ctx.setRequest(requestWrapper);

} else {

String urlNew = UriComponentsBuilder.fromHttpUrl(“http://localhost:9000").path("/v2/items/1001").build()

.toUriString();

log.info(“Redirecting to “ + urlNew);

HttpServletRequestWrapper requestWrapper = new HttpServletRequestWrapper(ctx.getRequest()) {

@Override

public String getRequestURI() {

return urlNew;

}

@Override

public StringBuffer getRequestURL() {

return new StringBuffer(urlNew);

}

};

ctx.setRequest(requestWrapper);

}

return null;

}

boolean isLegacy() {

return random.nextInt(100) < 90;

}

}

)
    Naina M

    Written by

    Naina M