Witam. Mam taką tabelę:
create table users (
id int not null primary key,
username varchar2(40) not null unique,
password varchar2(60) not null,
firstName varchar2(40) not null,
lastName varchar2(40) not null,
personalId varchar2(11) unique,
city varchar2(40),
address varchar2(40),
email varchar2(40) not null unique,
phone varchar2(9) unique
);
Aplikacja jest napisana w Springu z użyciem Spring Secyrity, w tabeli przechowuję hasła zahashowane algorytmem bcrypt. Wszystko jest ok, gdy chcę dodać nowego użytkownika bądź edytuje istniejącego wprowadzając nowe hasło. Problem pojawia się gdy w moim formularzu nie wprowadzę hasła, bo chcę zachować stare. Gdy dam edytuj bez wprowadzania hasła to shashuje mi hasha... Próbowałem uzyskać dostęp do hasła pobierając je z kontekstu, ale dostaję hasha z bazy, więc to mnie i tak nie ratuje.
@RequestMapping(value = "/admin/editMe", method = RequestMethod.POST)
public String editMe(@ModelAttribute("user") UserDto userDto,
BindingResult result) {
EditUserValidator editUserValidator = new EditUserValidator();
editUserValidator.validate(userDto, result);
if (userDto.getPassword().isEmpty()) {
Authentication auth = SecurityContextHolder.getContext()
.getAuthentication();
String username = auth.getName();
User user = userService.findByUsername(username);
System.out.println(user.getPassword());
userDto.setPassword(user.getPassword());
}
if (result.hasErrors()) {
return "admin/editme";
} else {
ErrorMessage errorMessage;
User user = prepareModelUser(userDto);
if ((errorMessage = userService.updateUser(user)) != null) {
result.rejectValue(errorMessage.getPath(),
errorMessage.getDescription());
}
return "admin/editme";
}
}
Jak to zrealizować? Żeby można edytować użytkownika bez wprowadzania nowego hasła.