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;
}
}
