首页 > 其他分享 >【问题记录】【SpringBoot】Filter中抛出的异常不会走RestControllerAdvice全局异常捕获

【问题记录】【SpringBoot】Filter中抛出的异常不会走RestControllerAdvice全局异常捕获

时间:2022-12-26 19:57:05浏览次数:43  
标签:SpringBoot SsoTokenFilter resultDto Filter resolver registration 异常 public

1  问题现象

//如下是我定义的全局异常捕获
@RestControllerAdvice public class RestExceptionHandler { /** * 默认全局异常处理。 * @param e the e * @return ResultDto */ @ExceptionHandler(Exception.class) @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) public ResultDto<String> exception(Exception e) { ResultDto<String> resultDto = new ResultDto<>(); log.error("全局异常信息 ex={}", e.getMessage(), e); if (handleExceptionControl(e, resultDto)) { return resultDto; } resultDto.setCode(ResultCodeEnum.ERROR.getCode()); resultDto.setMsg(e.getMessage()); return resultDto; } } //这个是我定义的FIlter 用于校验用户是否登录 @Slf4j public class SsoTokenFilter extends HttpServlet implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest)request; HttpServletResponse res = (HttpServletResponse)response; try { } catch (Exception e) { throw e;//不会走advice } } }

  

2  原因分析

请求进来,会按照 filter -> interceptor -> controllerAdvice -> aspect -> controller的顺序调用

当controller返回异常 也会按照controller -> aspect -> controllerAdvice -> interceptor -> filter来依次抛出

所以我们的Filter抛出的异常不会走advice,这是我们可以通过HandlerExceptionResolver来转换我们的异常。

3  解决办法

//自定义注解 引入SSO 登录校验Filter
@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Import(SsoConfig.class}) public @interface EnableSsoLogin { } @Slf4j public class SsoConfig implements DisposableBean { @Autowired @Qualifier("handlerExceptionResolver") private HandlerExceptionResolver resolver; @Bean public FilterRegistrationBean ssoFilterRegistration() { FilterRegistrationBean registration = new FilterRegistrationBean(); registration.setName("SsoTokenFilter"); registration.setOrder(1); registration.addUrlPatterns("/*"); SsoTokenFilter ssoTokenFilter = new SsoTokenFilter(resolver); registration.setFilter(ssoTokenFilter); return registration; } } @Slf4j public class SsoTokenFilter extends HttpServlet implements Filter { private HandlerExceptionResolver resolver; public SsoTokenFilter(HandlerExceptionResolver resolver) { this.resolver = resolver; } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest)request; HttpServletResponse res = (HttpServletResponse)response; try {         //todo } catch(Exception e) { resolver.resolveException(req, res, null, e); } } }

  

 


标签:SpringBoot,SsoTokenFilter,resultDto,Filter,resolver,registration,异常,public
From: https://www.cnblogs.com/kukuxjx/p/17006714.html

相关文章

  • 数字滤波器--线性滤波(Linear Filter)
    目录​​一、什么是数字滤波器​​​​二、数字滤波器的几个重要的基础概念​​​​三、数字滤波器的基本单元​​​​differentiator 差分器​​​​Integrator 积分器......
  • SpringBoot-v2.x.x部署SSL证书
    准备SSL证书——xxx.pfx格式阿里云申请免费的SSL即可,把域名绑定的SSL证书下载到本机桌面上,如下: 说明:两个证书文件(仅本次下载有效)——xxx.pfx:证书源......
  • EnvoyFilter详解
     欢迎关注我的公众号: 目前刚开始写一个月,一共写了18篇原创文章,文章目录如下:​​istio多集群探秘,部署了50次多集群后我得出的结论​​​​istio多集群链路追踪,附实操视频​......
  • python 异常处理 12
    当python程序在执行期间发生错误时,如果编写了处理该异常的代码,程序将继续运行;如果未对异常进行处理,程序将停止并显示traceback,其中包含有关异常的报告。异常是使用try......
  • 【Swagger】SpringBoot快速集成Swagger
    目录:1、依赖2、配置类3、注解引用4、可能遇到的问题5、拓展  1、依赖<!--swagger--><!--https://mvnrepository.com/artifact/io.springfo......
  • springboot利用Condition机制解决Kafka监听不到服务时报错的问题
    一般情况下,我们在写springboot使用Kafka监听的代码时,都是直接写个类,然后在方法上加个@KafkaListener就可以了,简单省事。就像下面这样@Component@Slf4jpublicclassKa......
  • SpringBoot2.x系列教程汇总-从入门到精通
    因为N没有分类归纳博客的功能,所以特写本帖汇总SpringBoot2.x系列教程,方便大家查阅!本套案例源码地址:https://gitee.com/sunyiyi/SpringBoot-demos​​SpringBoot2.x系列教程......
  • springboot 连接不上 redis 的三种解决方案!
    针对于这种情况,首先,我们最简单直接的方法就是需要确认Redis是否已经正常启动(验证方法:如果安装在Linux下的话可以使用ps-ef|grepredis来进行确认是否开启) 如果未开启,我......
  • 数组处理方法——filter
    一、作用普通记忆:filter用于对数组的过滤,返回值是一个新的数组,数组中的内容是符合条件的元素。使用记忆法记忆:谐音联想记忆+地点故事联想+地点定位记忆一......
  • java的异常体系图
    本文主要讲述java的异常体系图老韩图解:  自己理解: ......