在平时开发中,大家通常会使用@ExceptionHandler 和@ExceptionHandler `写一个全局异常处理器去捕获异常,统一封装返回前端使得报错更加的清晰明了,我突然有一次想试一下使用过滤器去写一个登录校验,结果发现过滤器抛出的异常并不会被全局异常处理器捕获。
原因: 过滤器是基于servlet容器的,而全局异常处理器是基于Spring容器的,请求到达服务器的时候会先到达servlet容器,而servlet容器抛出异常请求就终止了,并不会继续到达Spring容器,所以全局异常处理器捕获不到,
解决方案1
在过滤器中捕获异常用 handlerExceptionResolver.resolveException来进行抛出,这样异常就会传递到Spring容器中被全局异常处理器捕获
解决方案2
在过滤器抛出异常时,手动封装返回前端的报错