Zuul调用ErrorFilter前就向客户端返回完整堆栈信息,如何阻止该行为?
解决方案
1. 禁用Zuul自带默认错误处理过滤器
Zuul默认内置的SendErrorFilter优先级高于自定义ErrorFilter,会优先捕获异常并返回完整堆栈信息,首先需要在配置中关闭该默认过滤器:
- YAML配置(application.yml)
zuul: SendErrorFilter: post: disable: true
- Properties配置(application.properties)
zuul.SendErrorFilter.post.disable=true
2. 调整自定义ErrorFilter优先级
确保自定义ErrorFilter的优先级高于默认过滤器,示例实现代码如下:
@Component public class CustomErrorFilter extends ZuulFilter { @Override public String filterType() { return "error"; } @Override public int filterOrder() { // 优先级设置为-1,高于所有默认过滤器 return -1; } @Override public boolean shouldFilter() { return true; } @Override public Object run() { RequestContext ctx = RequestContext.getCurrentContext(); Throwable e = ctx.getThrowable(); // 自行实现堆栈日志记录逻辑 log.error("请求处理异常", e); // 构造自定义返回响应 ctx.setResponseBody("{\"code\":500,\"msg\":\"系统内部错误,请稍后重试\"}"); ctx.getResponse().setContentType("application/json;charset=UTF-8"); // 清除上下文中的异常信息,避免被后续逻辑重复处理 ctx.remove("throwable"); return null; } }
3. 可选配置(Spring Boot集成场景)
如果是Spring Boot集成Zuul的项目,额外添加如下配置关闭错误页自动返回堆栈的特性:
server: error: include-stacktrace: never
内容的提问来源于stack exchange,提问作者Anton Cavanaugh
相关产品推荐
相关产品推荐

