如何在Zuul中选择基于头的路由

时间:2018-01-31 09:10:15

标签: netflix-zuul spring-cloud-netflix

我在服务A和B前使用Netflix Zuul代理。

如何让Zuul代理根据传入请求中的HTTP标头选择到A和B的路由?

1 个答案:

答案 0 :(得分:1)

您应该根据您的逻辑创建一个前置过滤器。像这样:

@Component
public class RedirectionFilter extends ZuulFilter {

@Override
public String filterType() {
   return "pre";
}

@Override
public int filterOrder() {
   return 2;
}

@Override
public boolean shouldFilter() {
  return true;
}

@Override
public Object run() {
  RequestContext ctx = RequestContext.getCurrentContext();
  HttpServletRequest request = ctx.getRequest();`
  String header = request.getHeader("YOUR_HEADER_PARAM");

  if (header == "YOUR_A_LOGIC") {
    ctx.put("serviceId", "serviceA");
    //ctx.setRouteHost(new URL("http://Service_A_URL”));
  } else { // "YOUR_B_LOGIC"
    ctx.put("serviceId", "serviceB");
    //ctx.setRouteHost(new URL("http://Service_B_URL”));
  }
  log.info(String.format("%s request to %s", request.getMethod(), 
  request.getRequestURL().toString()));
  return null;
 }

我不确定100%关于重定向部分,但它是您需求的开始。 我添加了第二个重定向选项(注释行),可能有两个选项中的一个可以帮助你。

另见this example