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

Spring Security自定义UsernamePasswordAuthenticationFilter未替换默认过滤器不触发问题

自定义UsernamePasswordAuthenticationFilter未触发的常见遗漏配置

1. 未修改Filter默认的触发路径规则

UsernamePasswordAuthenticationFilter 默认仅拦截 POST /login 路径的请求,如果你需要对所有请求做身份校验,必须修改触发规则:

  • 方式一:在自定义Filter构造方法中设置全局匹配路径
public FireBaseAuthenticationFilter() {
    // 匹配所有请求路径
    setFilterProcessesUrl("/**");
}
  • 方式二:重写 requiresAuthentication 方法自定义触发逻辑
@Override
protected boolean requiresAuthentication(HttpServletRequest request, HttpServletResponse response) {
    // 可自定义请求触发规则,返回true代表当前请求需要走该Filter校验
    return true;
}

2. Filter注册位置错误

在WebSecurityConfigurerAdapter的configure(HttpSecurity http)方法中添加自定义Filter时,必须指定正确的执行顺序,不能直接使用addFilter方法,需要指定在默认UsernamePasswordAuthenticationFilter的同位置或者前置执行:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
        .cors().disable()
        .csrf().disable()
        .httpBasic().disable()
        .formLogin().disable()
        .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
        .and()
        .authorizeRequests()
        .anyRequest().authenticated()
        // 关键配置:指定自定义Filter的执行位置
        .and()
        .addFilterAt(new FireBaseAuthenticationFilter(authenticationManager()), UsernamePasswordAuthenticationFilter.class);
}

注意:注入自定义Filter时必须传入AuthenticationManager实例,否则Filter初始化会失败直接跳过执行。

3. 自定义Filter未正确纳入Spring Security过滤器链

  • 不要给FireBaseAuthenticationFilter类添加@Component/@Bean注解,否则会被Spring Boot自动注册到原生Servlet过滤器链,不会进入Spring Security的专属过滤器链
  • 如果需要注入其他Bean到自定义Filter中,在配置类中手动构造Filter实例并传入依赖,再注册到Spring Security链中即可

4. 安全路径匹配规则冲突

如果你的安全配置中配置了路径放行规则,需要确保需要认证的路径没有被提前排除,例如以下配置会导致所有请求直接放行,不会触发认证Filter:

// 错误示例
http.authorizeRequests().anyRequest().permitAll()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 18:27:01