Spring Boot应用启动失败:HttpSecurity Bean缺失与配置冲突问题
解决Spring Boot Security启动错误的步骤
1. 移除冲突的配置文件
- 删除
web.config:Spring Boot会自动注册Spring Security的过滤器链,无需手动在web.xml中配置springSecurityFilterChain。 - 删除
webSecurityConfig.xml,并移除SecSecurityConfig类中的@ImportResource注解:同时使用Java配置和XML配置会重复生成springSecurityFilterChain,导致Bean定义冲突。
2. 修正依赖版本
修改pom.xml中的Spring Security依赖,移除手动指定的版本,让Spring Boot Parent统一管理版本,避免版本不一致问题:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> <!-- 移除此处的version标签,使用parent管理的版本 --> </dependency>
3. 完善Java配置类
在SecSecurityConfig上添加@EnableWebSecurity注解,该注解会自动导入Spring Security的配置类,提供HttpSecurity的自动注入支持,同时补全安全规则配置:
@Configuration @EnableWebSecurity public class SecSecurityConfig { public SecSecurityConfig() { super(); } @Bean public InMemoryUserDetailsManager userDetailsService() { UserDetails user1 = User.withUsername("user1") .password(passwordEncoder().encode("user1Pass")) .roles("USER") .build(); UserDetails user2 = User.withUsername("user2") .password(passwordEncoder().encode("user2Pass")) .roles("USER") .build(); UserDetails admin = User.withUsername("admin") .password(passwordEncoder().encode("adminPass")) .roles("ADMIN") .build(); return new InMemoryUserDetailsManager(user1, user2, admin); } @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http // 配置权限拦截规则 .authorizeHttpRequests(auth -> auth .antMatchers("/login*").permitAll() .anyRequest().authenticated() ) .formLogin(form -> form .loginPage("/login.html") .loginProcessingUrl("/perform_login") .defaultSuccessUrl("/homepage.html", true) .failureUrl("/login.html?error=true") ) .logout(logout -> logout .logoutSuccessUrl("/login.html") .permitAll() ); return http.build(); } @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } }
4. 验证启动
完成上述修改后重新启动应用,即可正常运行:
- 未登录时访问任意页面会被重定向至
/login.html - 登录成功后跳转至
/homepage.html - 退出登录后返回登录页面
内容的提问来源于stack exchange,提问作者bircastri
相关产品推荐
相关产品推荐

