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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 02:34:50