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

Spring Boot WebFlux项目启动报错:Error processing condition on PropertyPlaceholderAutoConfiguration.propertySourcesPlaceholderConfigurer

Spring Boot WebFlux项目启动报错:Error processing condition on PropertyPlaceholderAutoConfiguration.propertySourcesPlaceholderConfigurer

嘿,这个问题我太熟悉了!你这是不小心混用了Servlet栈和Reactive栈的Spring Security依赖,导致项目启动时找不到Servlet相关的类。

我们来一步步拆解问题:
从报错栈的最底层能看到关键原因:

Caused by: java.lang.ClassNotFoundException: jakarta.servlet.Filter

为什么会找不到这个类?因为你用的是Spring Boot WebFlux(响应式Web框架,属于Reactive栈),但你引入了spring-security-web——这个依赖是给传统Servlet栈的Spring MVC项目用的,它依赖Servlet API,而WebFlux项目默认不会引入Servlet相关的包,自然就找不到jakarta.servlet.Filter了。

解决方案

1. 替换Spring Security依赖

打开你的build.gradle,移除Servlet栈的安全依赖:

implementation("org.springframework.security:spring-security-web")

换成Reactive栈对应的WebFlux安全依赖:

implementation("org.springframework.security:spring-security-webflux")

2. 调整安全配置类

原来的SecurityConfig是基于Servlet栈的HttpSecurity,WebFlux需要用Reactive栈的ServerHttpSecurity,同时注解也要换成WebFlux专用的:

修改后的配置类如下:

@Configuration
@EnableWebFluxSecurity
class SecurityConfig {

    @Bean
    fun securityFilterChain(http: ServerHttpSecurity): SecurityWebFilterChain {
        http.csrf { csrf -> 
            csrf.csrfTokenRepository(CookieServerCsrfTokenRepository.withHttpOnlyFalse())
        }
        .authorizeExchange { auth ->
            auth.anyExchange().authenticated()
        }
        .httpBasic(withDefaults())
        
        return http.build()
    }
}

注意几个关键点:

  • 注解从@EnableWebSecurity改成@EnableWebFluxSecurity
  • 配置参数从HttpSecurity换成ServerHttpSecurity
  • 方法返回值从SecurityFilterChain变成SecurityWebFilterChain
  • CSRF配置用CookieServerCsrfTokenRepository(WebFlux版本的CSRF Token仓库)
  • 授权规则从authorizeHttpRequests改成authorizeExchange

3. 验证依赖

确保你的依赖里现在只有Reactive相关的Spring Security组件:spring-security-config、spring-security-core、spring-security-webflux,没有spring-security-web。

为什么这样改?

Spring Boot针对Servlet栈(Spring MVC)和Reactive栈(WebFlux)提供了两套独立的Spring Security实现:

  • Servlet栈用spring-security-web,基于HttpSecurity配置
  • Reactive栈用spring-security-webflux,基于ServerHttpSecurity配置
    混用两者就会导致依赖冲突或缺失必要的类,这就是你遇到启动报错的核心原因。

现在重新启动项目,应该就能正常运行了!

备注:内容来源于stack exchange,提问作者FailedUnitTest

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 07:45:08