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。
我正在使用 Netflix Zuul v2.0 作为身份验证代理,即我正在使用 "pre" 过滤器将 JWT 令牌添加到请求 header。
我遇到的问题如下:当请求资源不可用时,"Internal Server Error" (500) 被 returned 而不是 "Request Timeout" (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。