在数据库

时间:2018-06-06 02:34:43

标签: java spring spring-boot spring-security

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

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));
}

2 个答案:

答案 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"));

我得到结果并保存在数据库中。