我有以下代码来加密密码并保存在数据库中:
PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
String hashPassword = passwordEncoder.encode("admin");
我得到结果并保存在数据库中,但是当我试图进入我的UserDetailsService
时,我遇到了以下问题:
如果我尝试直接传递用户详细信息密码,我会收到以下消息:
return new User(user.getEmail(),user.getPassword(), getPermissions(user));
没有为id“null”
映射PasswordEncoder如果我将passwordEncoder放入以下内容:
@Autowired
private PasswordEncoder passwordEncoder;
//add the passwordEnconder
return new User(user.getEmail(), passwordEncoder.encode(user.getPassword()), getPermissions(user));
我有以下问题:
由处理程序执行导致的已解决异常:错误=" invalid_grant",error_description ="凭据错误"
但是如果得到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));
}
答案 0 :(得分:2)
您需要在配置文件中为 BCryptPasswordEncoder 定义一个bean。
@Bean
BCryptPasswordEncoder passwordencoder() {
return new BCryptPasswordEncoder();
}
自动编码器,无论您需要对密码进行编码。
@Autowired
PasswordEncoder encoder;
在保存之前对密码进行编码,如下所示。 你用
String password = encoder.encode("Test"));
DB.save(password);
答案 1 :(得分:0)
我决定在生成密码之前添加{bcrypt}
。
示例:
PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
System.out.println("{bcrypt}" + passwordEncoder.encode("admin"));
我得到结果并保存在数据库中。