java - Spring Security,PasswordEncoder 的问题
问题描述
我对 PasswordEncoder 有疑问,
我的代码:
@Service
public class UserService {
private static final String DEFAULT_ROLE = "ROLE_USER";
private UserRepository userRepository;
private UserRoleRepository roleRepository;
public PasswordEncoder passwordEncoder;
@Autowired
public UserService(PasswordEncoder passwordEncoder){
this.passwordEncoder = passwordEncoder;
}
@Autowired
public void setUserRepository(UserRepository userRepository){
this.userRepository = userRepository;
}
@Autowired
public void setUserRoleRepository(UserRoleRepository roleRepository){
this.roleRepository = roleRepository;
}
public void addWithDefaultRole(User user){
UserRole defaultRole = roleRepository.findByRole(DEFAULT_ROLE);
user.getRoles().add(defaultRole);
String passwordHash = passwordEncoder.encode(user.getPassword());
user.setPassword(passwordHash);
userRepository.save(user);
}
}
错误:
应用程序无法启动
描述:
org.spring.service.UserService 中构造函数的参数 0 需要找不到类型为“org.springframework.security.crypto.password.PasswordEncoder”的 bean。
行动:
考虑在你的配置中定义一个 'org.springframework.security.crypto.password.PasswordEncoder' 类型的 bean。
进程以退出代码 1 结束
我不知道如何解决它。
解决方案
试试这种方式(两个bean之一,不是两个):
@Configuration
@EnableWebSecurity
public class WebSecurityConfigAuthentication extends WebSecurityConfigurerAdapter {
// For BCrypt Encoded password
@Bean
public PasswordEncoder passwordEncoder() {
PasswordEncoder encoder = new BCryptPasswordEncoder();
return encoder;
}
OR
// For no Encoder, plain text password
@Bean
public static NoOpPasswordEncoder passwordEncoder() {
return (NoOpPasswordEncoder) NoOpPasswordEncoder.getInstance();
}
}
推荐阅读
- android - 是否可以使用 Android 应用程序影响移动浏览器内容?
- r - R:缩放 Data.Table 中的每一列
- docker - 更新。LetsEncrypt 两个不同 docker 容器中的证书
- reactjs - gatsby-node.js 多个 api 调用
- r - Roxygen2:如何记录函数闭包中返回的函数?
- ios - 如何获取经纬度在地图中找到标记后(Xcode+Swift)
- sql-server - 将日期格式转换为文本 - 日月
- python - 如何在类方法中使用实例变量?
- python - 我正在努力使该功能适用于我的代码。我错过了要打印字母等级的部分
- linux - 如何在vim中从终端切换回编辑器?