gpt4 book ai didi

java - 在数据库中保存 BCryptPasswordEncoder 时出错

转载 作者:行者123 更新时间:2023-12-02 02:06:27 26 4
gpt4 key购买 nike

我有以下代码来生成加密密码并保存在数据库中:

PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
String hashPassword = passwordEncoder.encode("admin");

我得到结果并保存在数据库中,但是当我尝试进入我的UserDetailsS​​ervice时,我遇到了以下问题:

如果我尝试直接传递用户详细信息和密码,我会收到以下消息:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com