当前位置: 首页 > 知识库问答 >
问题:

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

范甫
2023-03-14

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

我的代码现在是这样的:

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

共有1个答案

丌官翰采
2023-03-14

@RestControllerAdvise对筛选器无效。对于它们,您需要实现一个附加的过滤器,如https://stackoverflow.com/a/34633687/16572295所示。

 类似资料:
  • 但这无济于事,仍然令人崩溃。 我在考虑make try{}catch返回500,并在每个过滤器中进行某种日志记录,但这将导致大量的重复。 有什么办法可以在全球范围内处理吗? MVC服务的添加方式如下:

  • 统一错误处理 文档:https://eggjs.org/zh-cn/tutorials/restful.html 自定义一个异常基类 // app / exceptions / http_exceptions.js class HttpExceptions extends Error { constructor(msg='服务器异常', code=1, httpCode=400) {

  • springboot全局异常处理器处理顺序问题 在使用异常处理器时,代码 当出现数据库异常时,返回 按理说越精确优先级越高,SQLIntegrityConstraintViolationException继承SQLException,为什么返回的却是被Exception异常捕获?求解答 我尝试注释Exception异常捕获,此时异常能被SQLException捕获

  • Middleware: 全局异常处理 我们在岩浆的实例其实已经注意到了,compose 的连接方式,让我们有能力精确控制异常。 Koa中间件最终行为强依赖注册顺序,比如我们这里要引入的异常处理,必须在业务逻辑中间件前注册,才能捕获后续中间件中未捕获异常,回想一下我们的调度器实现的异常传递流程。 <?php class ExceptionHandler implements Middleware

  • 有没有办法在泽西进行全局异常处理?与其单个资源具有try/catch块,然后调用一些方法来清理所有要发回客户端的异常,我希望有一种方法可以将其放在实际调用资源的地方。这可能吗?如果是这样,怎么做? 相反,where会向Jersey servlet抛出某种Jersey配置的异常: 有: 其中异常将被抛出到我可以拦截并从那里调用的东西。 这实际上只是为了简化所有Jersey资源,并确保返回给客户机的异

  • 我想在Spring中处理某些异常并将REST响应包装成另一种对象格式。 因此,我想到了使用过滤器并检查响应状态代码的想法,例如,如果是400,则意味着请求不正确,因此我可以将响应包装为所需的JSON格式,下面是代码示例: 将特定异常的响应封装在过滤器中是一种好方法吗?这种情况的缺点是什么?