You need to enable JavaScript to run this app. Spring Boot JWT场景下@Autowired注入AuthenticationManager失败问题
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot JWT场景下@Autowired注入AuthenticationManager失败问题

问题根因
  • 包名不匹配导致配置类未被扫描加载:你项目中安全配置类MySecurityConfigurations、JWT工具类、鉴权入口类的包前缀为com.expensesd.demo(expenses后多了一个d),而控制器、用户服务类的包前缀为com.expenses.demo。Spring Boot默认仅扫描启动类所在包及其子包下的组件,若你的启动类在com.expenses.demo路径下,将无法识别com.expensesd.demo下的配置类,你声明的AuthenticationManager Bean自然不会被Spring容器创建。
  • 错误配置@Bean注解:你在MySecurityConfigurations类的configure(AuthenticationManagerBuilder auth)重写方法上错误添加了@Bean注解,该方法的作用是配置认证规则,无需声明为Bean,加注解会干扰Spring Security的初始化流程,导致AuthenticationManager无法正常实例化。
解决方案

按以下步骤修改即可解决注入失败问题:

  1. 统一项目包名:将com.expensesd.demo.config包路径修改为com.expenses.demo.config,保证所有组件都在启动类的扫描范围内;也可在启动类上添加@ComponentScan(basePackages = {"com.expenses.demo","com.expensesd.demo"})临时兼容,但更推荐统一包名避免后续出现其他扫描问题。
  2. 移除错误的@Bean注解:删除MySecurityConfigurations类中configure(AuthenticationManagerBuilder auth)方法上的@Bean注解,修改后代码如下:
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth.userDetailsService(this.userDetailServiceImplementation).passwordEncoder(passwordEncoder());
}
  1. 检查启动类注解:确认启动类上没有排除Security自动配置的配置,如果存在@SpringBootApplication(exclude = {SecurityAutoConfiguration.class})这类注解,请删除。

修改完成后重启项目即可正常注入AuthenticationManager。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 11:48:02