为什么全局异常处理无法处理筛选器中引发的异常?



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

我的代码现在看起来是这样的:

  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();
    }
    }
    

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

所示。

最新更新