Ошибка сохранения BCryptPasswordEncoder в базе данных - PullRequest
0 голосов
/ 06 июня 2018

У меня есть следующий код для передачи зашифрованного пароля и сохранения в базе данных:

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

Я получаю результат и сохраняю в базе данных, но когда я пытаюсь войти в свой UserDetailsService, у меня возникаютследующие проблемы:

Если я попытаюсь передать пароль пользователя напрямую, у меня появится следующее сообщение:

return new User(user.getEmail(),user.getPassword(), getPermissions(user));

Не существует сопоставленного 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 голосов
/ 06 июня 2018

Вам необходимо определить bean-компонент для BCryptPasswordEncoder в файле конфигурации.

  @Bean
    BCryptPasswordEncoder passwordencoder() {
     return new BCryptPasswordEncoder();
    }

Кодер с автопроводкой везде, где вам нужно кодировать пароль.

@Autowired
PasswordEncoder encoder;

Кодироватьпароль перед сохранением, как показано ниже.Вы используете

String password = encoder.encode("Test"));
DB.save(password);
0 голосов
/ 06 июня 2018

Я решил добавить {bcrypt} до того, как сгенерирован пароль.

Пример:

PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
System.out.println("{bcrypt}" + passwordEncoder.encode("admin"));

Я получил результат и сохранил в базе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...