Добрый день.
Разбираюсь со спрингом, делаю простое CRUD приложение. Сделал авторизацию и регистрацию, при регистрации проверяю пароль на количество символов и сложность.
Решил прикрутить Личный кабинет, где пользователь может сам поменять свою почту, имя и (если нужно, пароль).
с сменой пароля проблем нет, не могут понять как сделать смену почты и имени без пароля, ведь я должен заполнить поля пароля и подтверждение пароля, и если я просто меняю имя и почту - валидатор ругается что пароль не может быть пустым.
Класс пользователя:
public class User{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int id;
@Column(name = "username")
@NotBlank(message = "не может быть пустым")
@Size(min = 2, message = "длина имени должна быть от 2 до 50 символов")
@Size(max = 50,message = "длина имени должна быть от 2 до 50 символов")
private String username;
@Column(name = "password")
@NotBlank(message = "не может быть пустым")
@PaswordCheckStrong(message = "длина пароля от 8 до 128 латинских символов, должен содержать спец символы #?!@$%^&*- и одну большую и маленькую букву")
private String password;
@Transient
private String passwordConfirm;
@Column(name = "email",unique = true)
@Email(message = "формат email не верный")
@NotBlank(message = "email не может быть пустым")
private String email;
//def constructor + getter + setter
}
Аннтоация PasswordCheckStrong - просто проверяет по regex качество пароля.
При передаче в шаблон - получаю текущего пользователя из
model.addAttribute("currentUser", (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal());
в thymeleaf обращаюсь к полям через th:object="${currentUser}" и th:input="*{id}",th:input="*{username}" и так далее.
Сам не смог придумать ничего лучше чем, убарть th:object и в modell.addAtribute внести строки пользователя.
User user = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal());
String username = user.getUsername();
String email = user.getEmail();
model.addAttribute("username", username);
model.addAttribute("email", email);
в форме thymeleaf их поменять и вернуть так же обычными String и уже потом обработать и добавить в User.
Но выглядит не красиво, как такие задачи решаются правильно?