温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

为何拦截器不生效了

发布时间:2026-09-18 20:36:03 来源:亿速云 阅读:115 作者:小樊 栏目:编程语言

“拦截器不生效”这个现象在 Spring / Spring Boot / Web 框架 里非常常见,但具体原因要看你用的是哪一类拦截器。下面我按 最常见场景 给你一个排查清单,你可以逐条对照。


一、Spring MVC 的 HandlerInterceptor 不生效

1️⃣ 没有正确注册拦截器

只写 implements HandlerInterceptor 是不够的中国,还需要:

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new MyInterceptor())
                .addPathPatterns("/**");
    }
}

❌ 常见错误:

  • 忘了实现 WebMvcConfigurer
  • 拦截路径写错了(如 /api/** 但实际是 /user)

2️⃣ 被 @EnableWebMvc 或自定义配置覆盖

如果你写了:

@EnableWebMvc

会 接管 Spring MVC 的默认配置,可能导致拦截器失效。

✅ 建议:

  • 不要用 @EnableWebMvc
  • 用 WebMvcConfigurer

3️⃣ 请求根本没进 DispatcherServlet

以下情况拦截器 不会生效:

  • 静态资源(/static/**)
  • 自定义 Filter 提前返回
  • 使用了 WebFlux(不是 MVC)

4️⃣ 路径匹配规则问题

.addPathPatterns("/api/**")
.excludePathPatterns("/api/login")

❌ 常见错误:

  • 实际访问的是 /api/user/list,但写成了 /api/*
  • excludePathPatterns 写错

二、Spring Security 的拦截“不生效”

如果你是 权限 / 登录拦截:

1️⃣ Security 配置放行了

.authorizeHttpRequests(auth -> auth
    .requestMatchers("/**").permitAll()
)

✅ 解决:

.anyRequest().authenticated()

2️⃣ 顺序问题(Filter vs Interceptor)

  • Filter 在 Interceptor 之前
  • Security 是 Filter

如果 Security 放行了,Interceptor 可能根本没机会执行。


三、自定义 Filter 不生效

1️⃣ 没加 @Component 或 @Bean

@Component
public class MyFilter implements Filter {}

或:

@Bean
public FilterRegistrationBean<MyFilter> filter() {
    ...
}

2️⃣ URL 不匹配

Filter 一般匹配:

/*
而不是
/**

四、Spring Boot 3 / Jakarta 的坑

如果你升级到 Spring Boot 3:

  • 包名变成 jakarta.servlet
  • 老 javax.servlet 的拦截器直接失效

五、快速自检清单 ✅

你可以回答我这几个问题,我可以精准定位:

  1. 用的是哪种拦截器?
    • HandlerInterceptor
    • Filter
    • Spring Security
  2. Spring Boot 版本(2.x / 3.x)
  3. 拦截器代码 & 注册代码
  4. 访问的 URL 是什么
  5. 控制台有没有报错 / 警告

只要你贴一点代码,我可以直接帮你改到“立刻生效”。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手