我有一个微服务架构,使用JHipster构建了多个服务。
在一项服务中,我实施了一个zuul 路线过滤器。
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的网址,在这种情况下为google.com。
如何从客户端保留原始请求网址?
网址必须保留http://myservice/serviceid/reverseproxy?url=2
而不是http://www.google.com
提前致谢。
答案 0 :(得分:1)
您似乎误解了重定向和代理的概念。
HTTP重定向意味着URL更改,因为所有工作都是由客户端完成的,最终通过发出2个请求调用(一个到您的代理,一个到外部服务)。
您想要的是将原始请求代理到外部服务(在您的示例中为google),这意味着您的过滤器应该是外部服务的客户端。这样,您的原始客户端只会在请求呼叫时进行,并且不知道它正在与您的外部服务进行通信。