重要的事情说三遍:Filter是基于Servlet的,其中抛出的异常是不会被SpringMVC的HandlerExceptionResolvers处理的!!!
重要的事情说三遍:Filter是基于Servlet的,其中抛出的异常是不会被SpringMVC的HandlerExceptionResolvers处理的!!!
重要的事情说三遍:Filter是基于Servlet的,其中抛出的异常是不会被SpringMVC的HandlerExceptionResolvers处理的!!!
也就是无法直接使用@ControllerAdvice进行处理
##但是:可以注入HandlerExceptionResolvers 手动throw给他,这样也可以被@ControllerAdvice捕获:
@Lazy
@Autowired
HandlerExceptionResolver handlerExceptionResolver;
/**
* jwt过期处理
* 抛出Auth异常 全局异常处理
*/
Claims claims = null;
try {
claims = JwtUtil.parseJWT(token);
}catch (ExpiredJwtException expiredJwtException){
handlerExceptionResolver.resolveException(request, response,null,new ExpiredJwtException(null,claims,"您的登录已过期!"));
}
文章指出Filter基于Servlet,其抛出的异常不会被SpringMVC的HandlerExceptionResolvers自动处理,因此不能直接用@ControllerAdvice捕获。但可以通过注入HandlerExceptionResolver手动处理,例如在遇到ExpiredJwtException时,解析JWTtoken失败,可以抛出异常并利用handlerExceptionResolver进行处理。
530





