过滤器抛出异常不被全局异常处理器捕获

109 阅读1分钟

在平时开发中,大家通常会使用@ExceptionHandler@ExceptionHandler `写一个全局异常处理器去捕获异常,统一封装返回前端使得报错更加的清晰明了,我突然有一次想试一下使用过滤器去写一个登录校验,结果发现过滤器抛出的异常并不会被全局异常处理器捕获。

原因: 过滤器是基于servlet容器的,而全局异常处理器是基于Spring容器的,请求到达服务器的时候会先到达servlet容器,而servlet容器抛出异常请求就终止了,并不会继续到达Spring容器,所以全局异常处理器捕获不到,

解决方案1

在过滤器中捕获异常用 handlerExceptionResolver.resolveException来进行抛出,这样异常就会传递到Spring容器中被全局异常处理器捕获

1744343562614.png

解决方案2

在过滤器抛出异常时,手动封装返回前端的报错