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

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

  •  
  •   shayang888 · 95 天前 · 966 次点击
    这是一个创建于 95 天前的主题,其中的信息可能已经有所发展或是发生改变。
    @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
        1
    Kyle18Tang   95 天前 via Android
    debug
        2
    johnniang   95 天前 via Android
    考虑把你的 demo 放到 github 上,这样我们都方便
        3
    sakudie   95 天前
    打个 log 看下 request uri,另外这样写 HandlerMethod handlerMethod=(HandlerMethod)object; 是有问题的
    这里不一定就是 HandlerMethod, 加个 if (handler instanceof HandlerMethod) 判断比较好
        4
    Aruforce   95 天前 via Android
    应该不是方法执行了 3 次 而是日志输出了 3 次……
        5
    shayang888   95 天前 via iPhone
    @sakudie 我知道问题在哪了 是我的 controller 里调用了异步方法造成的
    谢谢你的建议我这就去改
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1045 人在线   最高记录 4385   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 19ms · UTC 18:22 · PVG 02:22 · LAX 10:22 · JFK 13:22
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1