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

标签 java spring spring-boot spring-security

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

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/

相关文章:

java - Spring Boot如何正确使用@PostConstruct

java - 选择和删除

java - "Low level"使用Java的项目

java - 将 JSON 对象解析为 XML

java - Hsql - 如果在 spring boot 应用程序中不存在则创建模式

java - 如何在 Spring REST Servlet 旁边使用 CXF Soap Servlet?

java - 这个 Java HashMap 声明有什么问题?轻松点

spring - org.springframework.web.servlet.PageNotFound noHandlerFound未找到具有URI的HTTP请求的映射

java - 如何将 @Projection 分配给 @GetMapping spring servlet 端点?

java - 无法将 MultipartEntityBuilder 与 @ModelAttribute 粘合在一起