Zuul错误过滤器:根据错误设置响应状态

Zuul error filter: set response status dependent on error

我正在使用 Netflix Zuul v2.0 作为身份验证代理,即我正在使用 "pre" 过滤器将 JWT 令牌添加到请求 header。

我遇到的问题如下:当请求资源不可用时,"Internal Server Error" (500) 被 returned 而不是 "Request Timeout" (408) 错误。我已经通过实施 和 return 每当发生错误时出现 408 错误来解决这个问题。

但是,现在我正在 return 为每个错误生成 "Request Timeout" (408) 错误,即使原因不同。例如当有 "bad request" 或 "unauthorized" 请求时。

问题是:我如何知道错误过滤器内部问题的真正原因是什么?例如我只想 return 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;
  }
}

正在升级到 Zuul 2.0。1.RELEASE resolved the problem. When the request resource is unavailable a Gateway timeout (504) error is returned