自动装配不起作用,Spring Boot 1.5.8,NoSuchBeanDefinitionException:BCryptPasswordEncoder,

时间:2018-04-18 21:58:55

标签: java spring spring-mvc spring-boot spring-security

org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder没有被注射。无法找出原因。经历了stackoverflow内外的几个问题,每次都在改进我的搜索查询,只是为了找到任何人发布的类似问题。

以调试模式运行项目说在上下文初始化期间遇到异常,然后在下面打印出来:

Application failed to start due to an exception
    org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder' available: expected at least 1 bean which qualifies as autowire candidate.

Description:

Field encoder in com.codingethics.flightreservation.controller.UserController required a bean of type 'org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder' that could not be found.


Action:

Consider defining a bean of type 'org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder' in your configuration.

错误在其消息中非常明显,但令人困惑,因为我已经使 UserController 类和字段编码器有资格使用必需的注释进行自动装配。此外,我在这里尝试注入Spring提供的依赖项,而不是用户定义的依赖项。我不确定是否需要更多配置。在同一个项目中,我以类似的方式成功使用了JavaMailSender。

所以困扰我的是为什么这样做?

@Component
public class EmailUtil {

    @Autowired
    private JavaMailSender javaMailSender;

}

这不 UserController.java

    @Controller
    public class UserController {   

        @Autowired
        private BCryptPasswordEncoder encoder;

}

非常感谢任何形式的帮助/指导。

1 个答案:

答案 0 :(得分:2)

您是否尝试在@Configuration类中手动创建 BCryptPasswordEncoder bean?

@Bean
public PasswordEncoder passwordEncoder() {
    return new BCryptPasswordEncoder();
}

也许值得尝试。