Spring Boot 全局异常捕获 ControllerAdvice 无法捕获 过滤器(Filter)和拦截器(Interceptor)中的异常

Spring Boot 全局异常捕获 ControllerAdvice 无法捕获 过滤器(Filter)和拦截器(Interceptor)中的异常

💡 原文中文,约2400字,阅读约需6分钟。
📝

内容提要

在Spring Boot中,使用@ControllerAdvice和@RestControllerAdvice来处理异常。但是,自定义过滤器中的异常无法被捕获。解决方法是在过滤器中捕获异常,并将异常对象设置到Attribute属性中,然后在新建的接收异常的Controller中重新抛出异常。这样,ControllerAdvice就能捕获到异常了。

🎯

关键要点

  • 在Spring Boot中,使用@ControllerAdvice和@RestControllerAdvice来处理异常。
  • 自定义过滤器中的异常无法被捕获,特别是在Token过期时抛出的ExpiredJwtException。
  • 请求的执行顺序为:过滤器 -> 拦截器 -> ControllerAdvice。
  • ControllerAdvice无法捕获过滤器和拦截器中的异常,因为异常在到达ControllerAdvice之前就已抛出。
  • 要捕获过滤器中的异常,需要在过滤器中捕获异常并将其设置到Attribute属性中,然后在新的Controller中重新抛出异常。
  • 示例代码展示了如何在过滤器中捕获异常并在Controller中处理。
  • 理解原理后,可以更灵活地处理异常,或分享更好的解决方案。
🏷️

标签

➡️

继续阅读