当前位置:优学网  >  在线题库

doFilter过滤器执行两次,求教

发表时间:2022-06-23 13:17:06 阅读:141

不清楚为什么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;
                }
            }
        }

以下是执行结果

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

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

    1. 重复发起请求了(不过这种情况可能性较低)
    2. 后续代码进行了转发、重定向操作,这两种都会再次进入过滤器
  • 相关问题