【问题标题】:Why can't global exception handling handle exceptions thrown in the filter?为什么全局异常处理不能处理过滤器中抛出的异常?
【发布时间】:2021-11-12 20:24:18
【问题描述】:

为什么全局异常处理不能处理过滤器中抛出的异常?

我的代码现在是这样的:

  1. 过滤方法

     @Override
     public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
         HttpServletRequest   httpServletRequest = (HttpServletRequest) servletRequest;
         String token = httpServletRequest.getHeader("token");
         if (token==null)
             throw new NoTokenException();
    
         try {
             String s = jwtToken.parseJwt(token);
             httpServletRequest.setAttribute("id",s);
         }catch (Exception e){
             throw new RuntimeException();
         }
    
         filterChain.doFilter(servletRequest,servletResponse);
     }
    
  2. 控制器建议类

     @RestControllerAdvice
     public class GlobalExceptionHandle {
    
         @ExceptionHandler(Exception.class)
         public void Handle(Exception e, HttpServletResponse response) throws IOException {
             response.setContentType("application/json;charset=UTF-8");
             response.getWriter().write("msg");
             response.flushBuffer();
         }
     }
    

【问题讨论】:

    标签: java spring-boot


    【解决方案1】:

    @RestControllerAdvice 不适用于过滤器。对于他们,您需要实现一个额外的过滤器,如https://stackoverflow.com/a/34633687/16572295 中所述。

    【讨论】:

      猜你喜欢
      • 2021-05-19
      • 2015-12-12
      • 2016-11-03
      • 2013-07-24
      • 1970-01-01
      • 2021-01-19
      • 1970-01-01
      • 2015-12-21
      • 2011-09-29
      相关资源
      最近更新 更多