You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何自定义LoggerFilter无法捕获Postman的GET请求?

问题分析

你的LoggerFilter类已添加@Component注解,但doFilter方法未被调用,核心原因是过滤器的注册范围未覆盖目标请求路径,或者Spring Boot的自动注册逻辑未正确识别该过滤器的生效范围。

解决方案

方案1:用@WebFilter指定拦截路径并开启组件扫描

  1. 在LoggerFilter类上添加@WebFilter注解,明确拦截所有请求路径:
package FirstTest.demo.Controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

@WebFilter(urlPatterns = "/*")
public class LoggerFilter implements Filter{
    private static final Logger logger = LoggerFactory.getLogger(LoggerFilter.class);
    @Override
    public void doFilter(ServletRequest request, ServletResponse servletResponse, FilterChain filterChain) throws ServletException, IOException {
        if(request instanceof HttpServletRequest){
            var httpRequest = (HttpServletRequest) request;
            logger.info("[doFilter]" + httpRequest.getMethod() + " " + httpRequest.getRequestURI());
        }
        filterChain.doFilter(request, servletResponse);
    }
}
  1. 在Spring Boot启动类上添加@ServletComponentScan,让Spring扫描并注册Servlet相关组件:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;

@SpringBootApplication
@ServletComponentScan
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

方案2:通过FilterRegistrationBean手动注册过滤器

如果不想用@WebFilter,可以通过配置类手动注册,精确控制拦截规则:

import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class FilterConfig {
    @Bean
    public FilterRegistrationBean<LoggerFilter> loggerFilterRegistration() {
        FilterRegistrationBean<LoggerFilter> registrationBean = new FilterRegistrationBean<>();
        registrationBean.setFilter(new LoggerFilter());
        // 拦截所有请求,可按需修改为特定路径如"/api/*"
        registrationBean.addUrlPatterns("/*");
        // 设置优先级,数值越小优先级越高
        registrationBean.setOrder(1);
        return registrationBean;
    }
}

此时可以去掉LoggerFilter类上的@Component注解,避免重复注册。

额外排查点
  • 确认请求路径是否在过滤器拦截范围内:若过滤器默认仅拦截特定路径,而你的请求不在其中,就不会触发doFilter。
  • 检查是否有其他优先级更高的过滤器未调用filterChain.doFilter(request, servletResponse):这类情况会直接终止过滤器链,导致后续过滤器无法执行。

内容的提问来源于stack exchange,提问作者Tomasz Piszczek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 14:23:19