Vaadin Spring 23升24:VaadinSecurityFilterChainBean创建失败求助
问题核心
报错提示Spring无法在WebSecurityConfig类中找到名为filterChain()的非静态工厂方法来创建VaadinSecurityFilterChainBean,这是因为Vaadin 24对Spring Security的集成逻辑做了重构,和23版本的配置方式不兼容。
修复步骤
调整Security配置类结构
Vaadin 24不再需要手动定义filterChain()方法来生成VaadinSecurityFilterChainBean,改为继承VaadinWebSecurity并按需重写配置方法:@Configuration @EnableWebSecurity public class WebSecurityConfig extends VaadinWebSecurity { @Override protected void configure(HttpSecurity http) throws Exception { super.configure(http); // 配置登录页面示例 setLoginView(http, LoginView.class); // 添加自定义访问规则 http.authorizeHttpRequests(auth -> auth.requestMatchers("/public/**").permitAll() .anyRequest().authenticated() ); } @Override public void configure(WebSecurity web) throws Exception { super.configure(web); // 忽略静态资源路径 web.ignoring().requestMatchers("/images/**", "/assets/**"); } }校验依赖配置
确保项目中使用的是Vaadin 24版本的vaadin-spring-security依赖,同时Spring Security相关依赖已切换为Jakarta EE兼容版本(对应Spring Boot 3.x)。例如Maven的pom.xml中:<dependency> <groupId>com.vaadin</groupId> <artifactId>vaadin-spring-security</artifactId> <version>24.x.x</version> <!-- 替换为实际使用的24版本号 --> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>移除旧配置代码
删除原WebSecurityConfig中手动创建VaadinSecurityFilterChainBean或旧的filterChain()方法的代码,避免和Vaadin 24的自动配置冲突。
原因说明
Vaadin 24基于Spring Boot 3.x和Jakarta EE API,对Spring Security的集成做了简化:通过VaadinWebSecurity抽象类封装了Vaadin所需的安全过滤器链配置,不再需要开发者手动定义VaadinSecurityFilterChainBean,旧版本的自定义filterChain()方法签名已不被新版本的集成逻辑识别,从而触发Bean创建失败的错误。
内容的提问来源于stack exchange,提问作者tbeernot

