【过滤器异常全局处理异常】全局统一异常处理无法拦截filter中catch的异常

一、背景

系统定义了全局统一异常处理,使用了@RestControllerAdvice注解的方式。

鉴权使用的是JWT,使用filter对token进行解析和验证。然后突然发现一个问题,就是当token过期时,抛出的异常无法通过全局统一异常处理对外返回,而是返回500。

二、原因

全局统一异常处理只能处理控制器中发生的异常。要在Spring Security过滤器链中重用此功能,需要定义过滤器并将其挂钩到安全配置中。过滤器需要将异常重定向到统一异常处理中。

三、代码

在filter中注入HandlerExceptionResolver

然后在catch中抛出

之后在GlobalExceptionHandlerAdvice中定义需要处理的异常类型,本文中用的是JwtException

这时便可以跟在业务代码里面抛出的业务异常一样处理了。

原文地址:https://www.cnblogs.com/zzsuje/p/15402447.html