0

меня вниз по течению услуги, которые редирект x.jsp это место не маршрут шлюза, напримерКак я могу написать фильтр netflix zuul для изменения атрибута заголовка местоположения ответа?

gateway route --- localhost:8080/app - 192.168.1.1:80 (DownStream app) 

в DownStream приложение, когда пользователь не вошел в систему, он перенаправляет на 192.168.1.1:80/Login. jsp, который находится в заголовке ответа Location.

Этот URL-адрес не использует шлюз.

Я хочу написать фильтр zuul для изменения этого URL-адреса перенаправления путем сопоставления в динамических маршрутах zuul, например, для каждого URL-адреса, который маршрутизируется в изменении фильтра zuul. Location Заголовок по шлюзу. Как я могу это сделать?

+0

Так вы попробовали фильтр Zuul для этого, и это не сработало? –

+0

да доза не работает –

+0

Можете ли вы предоставить образец приложения? –

ответ

2

Вы, нижестоящее приложение, должны уважать х-пересылаемые * заголовки и не создавать перенаправленные таким образом. Но следующий фильтр изменит для вас место перенаправления:

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

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

@Override 
public boolean shouldFilter() { 
    int status = RequestContext.getCurrentContext().getResponseStatusCode(); 
    return status >= 300 && status < 400; 
} 

@Override 
public Object run() { 
    RequestContext ctx = RequestContext.getCurrentContext(); 
    Map<String, String> requestHeaders = ctx.getZuulRequestHeaders(); 
    Optional<Pair<String, String>> locationHeader = ctx.getZuulResponseHeaders() 
       .stream() 
       .filter(stringStringPair -> LOCATION.equals(stringStringPair.first())) 
       .findFirst(); 

     if (locationHeader.isPresent()) { 
      String oldLocation = locationHeader.get().second(); 
      String newLocation = ... 
      locationHeader.get().setSecond(newLocation); 
     } 
    return null; 
}