【问题标题】:Autowired not working, Spring Boot 1.5.8, NoSuchBeanDefinitionException :BCryptPasswordEncoder, [duplicate]自动装配不工作,Spring Boot 1.5.8,NoSuchBeanDefinitionException:BCryptPasswordEncoder,[重复]
【发布时间】:2018-09-29 06:45:57
【问题描述】:

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 类和字段 encoder 符合使用所需注释的自动装配条件。此外,在这里我试图注入 Spring 提供的依赖项,而不是用户定义的依赖项。我不确定是否需要更多配置。在同一个项目中,我以类似的方式成功使用了 JavaMailSender。

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

@Component
public class EmailUtil {

    @Autowired
    private JavaMailSender javaMailSender;

}

但是这不是UserController.java

    @Controller
    public class UserController {   

        @Autowired
        private BCryptPasswordEncoder encoder;

}

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

【问题讨论】:

  • 错误消息是精确具体的:它知道您正在尝试注入,但是它没有可用的 bean 来执行此操作。 (在这种特殊情况下,由于密码编码不同,Spring Security 特意决定让您注册自己的编码器。)
  • @chrylis 非常感谢。这就说得通了。但是.. //它没有可用的bean来做它。//为什么会这样,当我下载了那个依赖项时。 //Spring Security 故意决定让您注册自己的编码器//这是 Spring Security Framework 的预期行为吗?在他们的文档中是否存在?只是好奇。

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


【解决方案1】:

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

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

也许值得一试。

【讨论】:

  • 谢谢。是的,我确实遇到了类似的建议,并且奏效了。但这并不令人满意,因为我应该能够单独注入 BCryptPasswordEncoder。
  • @dur 好的。我确实会为为什么部分发布另一个问题。这是原始问题的一部分,对我来说确实很重要。文档似乎也没有答案。万分感谢。感谢您的帮助。
猜你喜欢
  • 2016-10-03
  • 1970-01-01
  • 2015-10-13
  • 1970-01-01
  • 2017-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-03
相关资源
最近更新 更多