Фильтр ошибок Zuul: установить статус ответа в зависимости от ошибки - PullRequest
0 голосов
/ 27 ноября 2018

Я использую Netflix Zuul v2.0 в качестве прокси-сервера аутентификации, т.е. я использую фильтр "pre" для добавления токена JWT в заголовок запроса.

Проблема, с которой я столкнулся, заключается в следующем: когда ресурс запроса недоступен, вместо ошибки «Время ожидания запроса» (408) возвращается «Внутренняя ошибка сервера» (500).Я решил эту проблему, внедрив пользовательский фильтр ошибок и возвращая ошибку 408 при возникновении ошибки.

Однако теперь я возвращаю ошибку «Время ожидания запроса» (408) для каждой ошибки.даже когда причина была другой.например, когда был «неверный запрос» или «несанкционированный» запрос.

Вопрос в том, как узнать в фильтре ошибок, какова реальная причина проблемы?например, я хочу вернуть 408, только когда действительно был тайм-аут.Afaik единственная информация, которая у меня есть, это то, что произошла ошибка, следовательно, ctx.getResponseStatusCode() равно 500.Или я что-то упустил?

Вот реализация пользовательского фильтра ошибок:

@Component
public class ConnectionErrorFilter extends ZuulFilter {

  protected static final String SEND_ERROR_FILTER_RAN = "sendErrorFilter.ran";

  @Override
  public String filterType() {
    return FilterConstants.ERROR_TYPE;
  }

  @Override
  public int filterOrder() {
    return FilterConstants.SEND_ERROR_FILTER_ORDER - 1; // Invoke before default error filter
  }

  @Override
  public boolean shouldFilter() {
    return true;
  }

  @Override
  public Object run() {
    RequestContext ctx = RequestContext.getCurrentContext();
    ctx.set(SEND_ERROR_FILTER_RAN); 
    ctx.setResponseStatusCode(408);  // Workaround because it is here IMO not detectable what the real cause was.
    // Thus, we assume that the cloud was not reachable.
    return null;
  }
}

1 Ответ

0 голосов
/ 03 декабря 2018

Обновление до Zuul 2.0.1.RELEASE решило проблему .Когда ресурс запроса недоступен, возвращается ошибка Время ожидания шлюза (504) .

...