doFilter过滤器执行两次,求教

不清楚为什么doFilter过滤器会执行两次,求教
以下是我过滤器部分代码

 @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        log.info(">>>>>>>>>>>>>>>>>>>> doFilter <<<<<<<<<<<<<<<<<<<<");
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        //获取 API
        String api = request.getRequestURI();
        log.info(">>>>> api: {}", api);
        //如果配置为白名单路径,则放行
        if (!CollectionUtil.isEmpty(WHITE_LiST_API)) {
            for (String WHITE_API : WHITE_LiST_API) {
                if (api.contains(WHITE_API)) {
                    log.info(">>>>> 在白名单内");
                    filterChain.doFilter(servletRequest, servletResponse);
                    return;
                }
            }
        }

以下是执行结果
image.png

阅读 4.1k
2 个回答

可能是被双重注册,比如同时加了 @WebFilter@Component,去掉 @Component 就行
也可能是前端发起多次请求(浏览器的话打开网络监听看一下),检查前端代码

看了一下你的描述,可能有如下情况:

  1. 重复发起请求了(不过这种情况可能性较低)
  2. 后续代码进行了转发、重定向操作,这两种都会再次进入过滤器
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏