【发布时间】:2018-08-06 15:09:47
【问题描述】:
我想添加一个自定义错误 Zuul 过滤器,并希望确保 SendErrorFilter 不会执行。我查看了一些 github 链接,包括 Spring-cloud/spring-cloud-netflix 和各种 stack-overflow 问题:-
Overriding Zuul Filter SendErrorFilter
我的代码如下-
public class CustomErrorFilter extends ZuulFilter {
private static final Logger LOG = LoggerFactory.getLogger(CustomErrorFilter.class);
@Override
public String filterType() {
return "post";
}
@Override
public int filterOrder() {
return -1;
}
@Override
public boolean shouldFilter() {
RequestContext ctx=RequestContext.getCurrentContext();
if(ctx.getThrowable()!=null)
return true;
else
return false;
}
@Override
public Object run() {
RequestContext ctx = RequestContext.getCurrentContext();
ctx.setThrowable(null); // response is not returned unless
throwable is set to null.
ctx.remove("error.status_code");
ctx.setResponseBody(“Error”);
ctx.getResponse().setContentType("text/plain");
ctx.setResponseStatusCode(400);
}
return null;
}
我遇到以下问题-
将过滤器顺序设置为
-1不会禁止sendErrorFilter运行。要停止 sendErrorFilter 运行,我需要设置
zuul.SendErrorFilter.error.disable=trueinbootstrap.yml要获得在自定义错误过滤器中设置的响应正文,我需要将
throwable设置为null,如github 中所述。将过滤器设置为 "error" 类型不会执行任何操作,并且自定义过滤器不会运行。
我希望有人解释一下,我做错了什么以及处理自定义错误过滤器的最正确方法是什么,因为网络上有很多相互矛盾的信息。
依赖关系-
spring cloud - Edgware.RELEASE
spring cloud netflix starter zuul-1.4.3.RELEASE
【问题讨论】:
标签: spring spring-cloud spring-cloud-netflix netflix-zuul