Spring Boot 1.5.8中BCryptPasswordEncoder注入失败求助
解决Spring Boot 1.5.8中BCryptPasswordEncoder无法@Autowired注入的问题
我之前也踩过这个坑,在Spring Boot 1.5.x版本里,org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder并不会被自动注册为Spring Bean,这就是你触发NoSuchBeanDefinitionException的核心原因——Spring容器里根本找不到这个类的实例,自然没法完成注入。
解决起来很直接,手动给它注册一个Bean就行,具体步骤如下:
- 创建一个配置类(比如命名为
SecurityConfig),用@Configuration注解标记,然后在里面定义一个返回BCryptPasswordEncoder的方法并加上@Bean注解:
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; @Configuration public class SecurityConfig { @Bean public BCryptPasswordEncoder bCryptPasswordEncoder() { // 可选:指定加密强度参数,比如BCryptPasswordEncoder(10),默认值也是10 return new BCryptPasswordEncoder(); } }
- 确保这个配置类在Spring Boot主启动类的扫描范围内:要么和主类处于同一个包/子包下,要么主类上的
@SpringBootApplication已经通过scanBasePackages参数包含了该配置类所在的包路径。
额外补充:如果你已经有自定义的Spring Security配置类(继承WebSecurityConfigurerAdapter的那种),也可以直接把这个@Bean方法放在那个配置类里,不用单独新建配置类,效果完全一致。
做完这些操作后重启项目,@Autowired BCryptPasswordEncoder passwordEncoder就能正常完成注入,上下文初始化异常也会消失。
内容的提问来源于stack exchange,提问作者Asif Kamran Malick
相关产品推荐
相关产品推荐

