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),这意味着你的过滤器应该是你的外部服务的客户端。这样,您的原始客户端仅根据请求进行调用,并且不知道它正在与您的外部服务通信。
我有一个微服务架构,其中有几个使用 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),这意味着你的过滤器应该是你的外部服务的客户端。这样,您的原始客户端仅根据请求进行调用,并且不知道它正在与您的外部服务通信。