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

Spring Security自定义JWT过滤器未生效 无令牌请求可正常访问问题求助

问题排查与解决方案

1. 确认包扫描配置有效性

你的SecurityConfig上标注了@ComponentScan("my.pac"),需同时满足以下条件:

  • SecurityConfig本身必须在Spring Boot启动类的扫描包路径下,否则整个安全配置不会被容器加载,所有规则都不生效
  • JwtFilter、JwtProvider、CustomUserDetailsService三个类必须全部位于my.pac包或其子包内,否则JwtFilter无法被正常实例化注入到安全配置中,自然不会被加入过滤链执行。

2. 排查WebSecurity全局忽略规则

如果你重写了configure(WebSecurity web)方法,并且配置了web.ignoring()规则覆盖了所有接口路径,那么所有请求会直接跳过整个Spring Security过滤链,你的自定义过滤器也不会触发。如果存在该类配置,仅保留静态资源、公共接口等不需要鉴权的路径即可。

3. 调整过滤器基类

建议将JwtFilter的父类从GenericFilterBean替换为OncePerRequestFilter,避免Servlet容器中同请求多次触发过滤器的问题,原有逻辑无需修改:

@Component
public class JwtFilter extends OncePerRequestFilter {
    // 保留原有所有业务逻辑即可
}

4. 验证过滤器实例化状态

在JwtFilter的构造方法或者@PostConstruct注解的初始化方法中添加日志输出,如果启动后无对应日志,说明过滤器未被Spring容器加载,优先回查包扫描配置。

补充说明:你现有JwtFilter的逻辑仅负责填充认证上下文,本身不会拦截无有效token的请求。在你配置anyRequest().authenticated()后,无有效token的请求正常会被Spring Security原生拦截返回401,如果此时无token请求仍能正常访问,可确定是你的安全配置整体未生效,优先排查第一条的包扫描问题。

内容的提问来源于stack exchange,提问作者Ilya Y

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 19:15:00