2016-09-30 3 views
0

У меня есть микросервисная архитектура с несколькими службами, созданная с использованием JHipster.Zuul reverse proxy preserve URL

Внутри одной службы я внедрил 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 статуса) пользователь на URL с идентификатором 2, в этом случае google.com.

Как можно сохранить первоначальный URL-адрес от клиента?

URL-адрес должен оставаться http://myservice/serviceid/reverseproxy?url=2 вместо http://www.google.com

Спасибо заранее.

ответ

1

Кажется, вы неправильно поняли понятия перенаправления и проксификации.

HTTP-перенаправление означает изменение URL-адреса, потому что вся работа выполняется клиентом, который заканчивает выполнение двумя запросами (один для вашего прокси-сервера и один для внешней службы).

Здесь вы хотите проксифицировать исходный запрос внешней службы (в вашем примере Google), это означает, что ваш фильтр должен быть клиентом вашей внешней службы. Таким образом, ваш оригинальный клиент делает только по запросу звонок и не знает, что он разговаривает с вашим внешним сервисом.

+0

Благодарим вас за разъяснение. Можно ли проксификовать с помощью zuul? Или я должен использовать другой инструмент, например nginx? – DropTheCode

+0

Zuul - прокси, так что да, это возможно. Разница с ngninx заключается в том, что в Zuul вы можете создать свою собственную бизнес-логику в java. Поэтому, если ваши правила проксирования просты, ngninx выполнит эту работу. –

+0

Позвольте мне повторить. Мне нужно создать фильтр маршрутов, внутри метода запуска создайте HttpClient, который получает содержимое «внешнего» URL-адреса? Можете ли вы привести мне пример? – DropTheCode