我有以下代码来生成加密密码并保存在数据库中:
PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
String hashPassword = passwordEncoder.encode("admin");
我得到结果并保存在数据库中,但是当我尝试进入我的UserDetailsService
时,我遇到了以下问题:
如果我尝试直接传递用户详细信息和密码,我会收到以下消息:
return new User(user.getEmail(),user.getPassword(), getPermissions(user));
没有为ID“null”映射的PasswordEncoder
如果我将密码编码器设置如下:
@Autowired
private PasswordEncoder passwordEncoder;
//add the passwordEnconder
return new User(user.getEmail(), passwordEncoder.encode(user.getPassword()), getPermissions(user));
我有以下问题:
已解决由处理程序执行引起的异常:error="invalid_grant"、error_description="Bad credential"
但是如果获取passwordEnconder并直接输入带有密码的用户,如下所示,我就成功了:
//success code
return new User(user.getEmail(),passwordEncoder.encode("admin"), getPermissions(user));
那么如何生成有效的密码以保存在数据库中?
我的成功代码方法是:
@Override
public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {
Optional<User> userOptional = repository.findByEmail(email);
User user = userOptional.orElseThrow(() -> new UsernameNotFoundException("Usuário e/ou senha incorretos"));
return new org.springframework.security.core.userdetails.User(user.getEmail(),passwordEncoder.encode("admin"), getPermissions(user));
}
最佳答案
您需要在配置文件中为BCryptPasswordEncoder定义一个bean。
@Bean
BCryptPasswordEncoder passwordencoder() {
return new BCryptPasswordEncoder();
}
在任何需要对密码进行编码的地方自动连接编码器。
@Autowired
PasswordEncoder encoder;
保存前对密码进行编码,如下所示。 您使用
String password = encoder.encode("Test"));
DB.save(password);
关于java - 在数据库中保存 BCryptPasswordEncoder 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50711491/