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

2018-11-17 16:48:30 +08:00
 shayang888
@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 次呢

3364 次点击
所在节点    Java
5 条回复
Kyle18Tang
2018-11-17 17:29:00 +08:00
debug
johnniang
2018-11-17 17:30:51 +08:00
考虑把你的 demo 放到 github 上,这样我们都方便
sakudie
2018-11-17 17:46:13 +08:00
打个 log 看下 request uri,另外这样写 HandlerMethod handlerMethod=(HandlerMethod)object; 是有问题的
这里不一定就是 HandlerMethod, 加个 if (handler instanceof HandlerMethod) 判断比较好
Aruforce
2018-11-17 17:49:41 +08:00
应该不是方法执行了 3 次 而是日志输出了 3 次……
shayang888
2018-11-17 18:13:17 +08:00
@sakudie 我知道问题在哪了 是我的 controller 里调用了异步方法造成的
谢谢你的建议我这就去改

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/508800

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX