Zuul 反向代理保留 URL

Zuul reverse proxy preserve URL

我有一个微服务架构,其中有几个使用 JHipster 构建的服务。

在一项服务中,我实现了一个 zuul route 过滤器。

public class TestZuulFilter extends ZuulFilter {

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

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

  @Override
  public boolean shouldFilter() {
      String requestUri = RequestContext.getCurrentContext().getRequest().getRequestURI();
      return "/serviceid/reverseproxy".equals(requestUri);
  }

  @Override
  public Object run() {

       // get url from id
       String id = ctx.getRequest().getParameter("id"); 
       Strign url = URLService.getURLFromId(id);

       try 
       {
          RequestContext ctx = RequestContext.getCurrentContext();

          // redirect
          ctx.setRouteHost(new URL(url));

       } catch(MalformedURLException ex) {}

       return null;
  }
}

当客户端调用我的服务时 http://myservice/serviceid/reverseproxy?id=2 zuul 将用户重定向(http 302 状态)到 ID 为 2 的 url,在本例中为 google.com.

我如何保留来自客户端的原始请求URL?

url必须保持http://myservice/serviceid/reverseproxy?url=2而不是http://www.google.com

提前致谢。

看来你误解了重定向和代理的概念。

HTTP 重定向意味着 URL 更改,因为所有工作都由客户端完成,客户端最终发出 2 个请求调用(一个到您的代理,一个到外部服务)。

这里你想要的是将原始请求代理到外部服务(在你的例子中google),这意味着你的过滤器应该是你的外部服务的客户端。这样,您的原始客户端仅根据请求进行调用,并且不知道它正在与您的外部服务通信。