Spring Boot Как проверить, совпадает ли кодированный пароль из db с паролем из формы перед обновлением - PullRequest
0 голосов
/ 28 ноября 2018

Я реализую метод в своем методе обновления для проверки, совпадает ли данный пароль в UpdateForm с закодированным паролем из базы данных.
Я не нашел ни одного учебного пособия или решения, но я пробовал кое-что, ноничего не работает.
Это мой метод обновления

@RequestMapping(value = {"/home/editUser"}, method = RequestMethod.POST)
public String home(@ModelAttribute("editUser") User editUser, Model model) {
    logger.info("/home/editUser");
    try {
        User user = userService.findById(editUser.getId());
        if (!user.equals(editUser)) {
            //old password matching
            if (user.getPassword_1() == editUser.getPassword_1()) {
                //encode new password
                editUser.setPassword(PassEncoding.getInstance().passwordEncoder.encode(editUser.getPassword()));
                //update
                userService.update(editUser);
                model.addAttribute("msg", "success");
            }
            else {
                System.out.println("not match");
            }
        } else {
            model.addAttribute("msg", "same");
        }
    } catch (Exception e) {
        model.addAttribute("msg", "fail");
        logger.error("editUser: " + e.getMessage());
    }
    model.addAttribute("home", editUser);
    return "home";
}

Password_1 - это мой oldpassword (фактический) , но я не знаю, как я могу реализовать кодировщик паролей и

не совпадает

Заранее спасибо за помощь:)

Я только что попробовал

if(PassEncoding.getInstance().passwordEncoder.matches(editUser.getPassword_1(), user.getPassword_1()))

, но

не совпадает

Работает с

if(PassEncoding.getInstance().passwordEncoder.matches(editUser.getPassword_1(), user.getPassword()))

Большое спасибо!

Ответы [ 3 ]

0 голосов
/ 28 ноября 2018

вы можете использовать org.springframework.security.crypto.password.PasswordEncoder

@Autowired
private final PasswordEncoder passwordEncoder;
....
....
boolean result = passwordEncoder.matches(password_plan_text_here, encoded_password_here);

см. Ссылку ниже для получения дополнительной информации https://docs.spring.io/spring-security/site/docs/4.2.4.RELEASE/apidocs/org/springframework/security/crypto/password/PasswordEncoder.html

Вам необходимовыберите правильный датчик, как показано ниже.

@Bean
public PasswordEncoder passwordEncoder() {
    return new BCryptPasswordEncoder();
}
0 голосов
/ 30 января 2019

Вы можете реализовать это, как показано ниже

Если хотите, вы можете использовать эту аннотацию в аргументе контроллера, чтобы убедиться, что ваш пользователь аутентифицирован.

@AuthenticationPrincipal User user
.........
.........

Используйте этот метод как структуру, чтобыпроверьте ваш пароль соответствует или нет.Он возвращает истинное значение, если он совпадает.

import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;

..........
..........

Ваш входной пароль - это «пароль», который вы делаете, чтобы он соответствовал пользователю БД, находящему

User user = userService.findById(editUser.getId());

public boolean userPasswordCheck(String password, User user) {

    PasswordEncoder passencoder = new BCryptPasswordEncoder();
    String encodedPassword = user.getPassword();
    return passencoder.matches(password, encodedPassword);
}
0 голосов
/ 28 ноября 2018

Вам необходимо кодировать локальный пароль, прежде чем сравнивать его с паролем db.

Самый простой способ - это зашифровать проход в MD5 таким образом, что HASH никогда не изменится, и вы можете сравнить проход без ошибок..

Надеюсь, это то, о чем вы просите, дайте мне знать, если вам нужна дополнительная помощь.(Код или другой).

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