V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
shayang888
V2EX  ›  Java

为什么拦截器里 preHandler 会执行了 3 次?

  •  
  •   shayang888 · 2018-11-17 16:48:30 +08:00 · 3326 次点击
    这是一个创建于 1958 天前的主题,其中的信息可能已经有所发展或是发生改变。
    @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) {
            String jwt = request.getHeader("auth");
            String payloadKey = "apitest";
            Map<String, Object> map = new HashMap<>(8);
            HandlerMethod handlerMethod=(HandlerMethod)object;
            Class type = handlerMethod.getBeanType();
            if (type.isAnnotationPresent(Auth.class)) {
                try {
                    if (jwt == null || jwt.isEmpty() || jwt.isBlank() || !Objects.equals(payloadKey, JwtUtil.parseJWT(jwt).get("info", String.class))) {
                        map.put("status", ErrorEnum.AUTH_FAILED.getStatus());
                        map.put("message", ErrorEnum.AUTH_FAILED.getMessage());
                        returnJson(response, map);
                        return false;
                    }
                }catch (ExpiredJwtException | SignatureException | MalformedJwtException e){
                    map.put("status", ErrorEnum.AUTH_FAILED.getStatus());
                    map.put("message", ErrorEnum.AUTH_FAILED.getMessage());
                    returnJson(response, map);
                    return false;
                }catch (Exception e){
                    e.printStackTrace();
                }
            }
            log.info("1");
            return true;
        }
    

    下面那个 log.info("1")为什么会执行了 3 次呢

    5 条回复    2018-11-17 18:13:17 +08:00
    Kyle18Tang
        1
    Kyle18Tang  
       2018-11-17 17:29:00 +08:00 via Android
    debug
    johnniang
        2
    johnniang  
       2018-11-17 17:30:51 +08:00 via Android
    考虑把你的 demo 放到 github 上,这样我们都方便
    sakudie
        3
    sakudie  
       2018-11-17 17:46:13 +08:00
    打个 log 看下 request uri,另外这样写 HandlerMethod handlerMethod=(HandlerMethod)object; 是有问题的
    这里不一定就是 HandlerMethod, 加个 if (handler instanceof HandlerMethod) 判断比较好
    Aruforce
        4
    Aruforce  
       2018-11-17 17:49:41 +08:00 via Android
    应该不是方法执行了 3 次 而是日志输出了 3 次……
    shayang888
        5
    shayang888  
    OP
       2018-11-17 18:13:17 +08:00 via iPhone
    @sakudie 我知道问题在哪了 是我的 controller 里调用了异步方法造成的
    谢谢你的建议我这就去改
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3209 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 11:36 · PVG 19:36 · LAX 04:36 · JFK 07:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.