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

非Spring Boot环境下Spring Security实例化HttpSecurity失败求助

解决方案

1. 修正SecurityConfig的继承关系

删除extends WebSecurityConfiguration,@EnableWebSecurity已经自动导入Spring Security核心配置类,手动继承会破坏默认Bean创建顺序,引发依赖注入异常。修改后配置类头部如下:

@Configuration
@EnableWebSecurity
@EnableAspectJAutoProxy(proxyTargetClass = true)
@ComponentScan(basePackages = "io.angel") // 替换为实际包路径,确保JpaUserDetailsManager被扫描到
public class SecurityConfig {
    // 原有代码保留,移除@Autowired的JpaUserDetailsManager字段
}

2. 调整依赖注入方式,解决Bean加载顺序问题

不要在配置类中直接通过@Autowired注入JpaUserDetailsManager,改用方法参数注入,让Spring自动保证依赖Bean先实例化:

@Bean
public DaoAuthenticationProvider jpaDaoAuthenticationProvider(JpaUserDetailsManager jpaUserDetailsManager, BCryptPasswordEncoder passwordEncoder) {
    DaoAuthenticationProvider daoAuthenticationProvider = new DaoAuthenticationProvider();
    daoAuthenticationProvider.setUserDetailsService(jpaUserDetailsManager);
    daoAuthenticationProvider.setPasswordEncoder(passwordEncoder);
    return daoAuthenticationProvider;
}

同时删除SecurityConfig中原有@Autowired private JpaUserDetailsManager jpaUserDetailsManager;字段。

3. 确保JpaUserDetailsManager的Bean正确创建

方式一:基于@Service的扫描

确认JpaUserDetailsManager所在包被@ComponentScan覆盖,若使用XML配置则添加<context:component-scan base-package="io.angel.service"/>(对应实际包路径)。

方式二:显式声明@Bean

若@Service扫描无效,在配置类中手动声明Bean,同时直接注入UserRepository避免Autowired延迟问题:

@Bean
public JpaUserDetailsManager jpaUserDetailsManager(UserRepository userRepository) {
    JpaUserDetailsManager manager = new JpaUserDetailsManager();
    manager.setUserRepository(userRepository);
    return manager;
}

注意:需保证UserRepository已通过@Repository注解或@Bean声明为Spring管理的Bean。

4. 配置事务管理器(纯Spring环境必备)

由于JpaUserDetailsManager使用了@Transactional注解,纯Spring环境下需手动配置事务管理器,否则事务注解不生效,可能间接引发Bean初始化异常:

@Bean
public PlatformTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) {
    JpaTransactionManager transactionManager = new JpaTransactionManager();
    transactionManager.setEntityManagerFactory(entityManagerFactory);
    return transactionManager;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 12:10:28