为什么全局异常处理不能处理过滤器中抛出的异常?
我的代码现在看起来是这样的:
-
筛选方法
@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); }
-
控制器通知类
@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.