Java Spring安全性,密码编码器问题

Java Spring安全性,密码编码器问题,java,spring,spring-security,Java,Spring,Spring Security,我的密码编码器有问题 我的代码: @服务 公共类用户服务{ 私有静态最终字符串DEFAULT\u ROLE=“ROLE\u USER”; 私有用户存储库用户存储库; 私人用户角色扮演者角色扮演者角色扮演者; 公共密码编码器; @自动连线 公共用户服务(PasswordEncoder PasswordEncoder){ this.passwordEncoder=passwordEncoder; } @自动连线 public void setUserRepository(UserRepository

我的密码编码器有问题

我的代码:

@服务
公共类用户服务{
私有静态最终字符串DEFAULT\u ROLE=“ROLE\u USER”;
私有用户存储库用户存储库;
私人用户角色扮演者角色扮演者角色扮演者;
公共密码编码器;
@自动连线
公共用户服务(PasswordEncoder PasswordEncoder){
this.passwordEncoder=passwordEncoder;
}
@自动连线
public void setUserRepository(UserRepository UserRepository){
this.userRepository=userRepository;
}
@自动连线
public void setUserRoleRepository(UserRoleRepository roleRepository){
this.roleRepository=roleRepository;
}
public void addWithDefaultRole(用户){
UserRole defaultRole=roleRepository.findByRole(默认角色);
user.getRoles().add(defaultRole);
字符串passwordHash=passwordEncoder.encode(user.getPassword());
user.setPassword(passwordHash);
userRepository.save(用户);
}
}
错误:


应用程序无法启动


说明:

org.spring.service.UserService中构造函数的参数0需要找不到类型为“org.springframework.security.crypto.password.PasswordEncoder”的bean

行动:

考虑在配置中定义“org.springframework.security.crypto.password.PasswordEncoder”类型的bean

进程已完成,退出代码为1


我不知道如何修复它。

要使依赖项注入工作,您需要准确地声明一个适当类型的bean,否则就没有需要注入的内容。正是这告诉了你例外

@Bean
public PasswordEncoder passwordEncoder() {
    return new BCryptPasswordEncoder(); // or any other password encoder
}

要使依赖项注入工作,您需要准确地声明一个适当类型的bean,否则就没有需要注入的内容。正是这告诉了你例外

@Bean
public PasswordEncoder passwordEncoder() {
    return new BCryptPasswordEncoder(); // or any other password encoder
}
尝试这种方式(两个bean中的一个,而不是两个):

尝试这种方式(两个bean中的一个,而不是两个):


我将您的代码添加到UserService,但我有另一个问题描述:应用程序上下文中某些bean的依赖关系形成了一个循环:┌─────┐ | 在文件[C:\Users\…\userService.class]中定义的userService└─────┘ 进程结束,退出代码1将bean输出到一个单独的
@组件
。现在,您想在
用户服务
中插入一个
密码编码器
,但这显然是声明它的组件。我将您的代码添加到用户服务,但我有另一个问题描述:应用程序上下文中某些bean的依赖关系形成一个循环:┌─────┐ | 在文件[C:\Users\…\userService.class]中定义的userService└─────┘ 进程结束,退出代码1将bean输出到一个单独的
@组件
。现在,您希望在
UserService
中插入一个
PasswordEncoder
,但声明它的组件就是这个组件。