我正在尝试进行跨领域验证。它是简单的密码,并确认密码验证。当我添加具有不同密码验证功能的用户时,显示错误“密码错误”。但是,当我尝试使用正确的密码添加用户时,出现错误提示:
对类[pl.coderslab.charity.entity.User]的验证失败在组的持续时间内[javax.validation.groups.Default,]违反约束的清单:[ConstraintViolationImpl {interpolatedMessage ='{pl.coderslab.passwordValidator.error.message}',propertyPath =,rootBeanClass = class pl.coderslab.charity.entity.User,messageTemplate ='{pl.coderslab.passwordValidator.error.message}'}]javax.validation.ConstraintViolationException:验证失败持续时间期间的类[pl.coderslab.charity.entity.User]groups [javax.validation.groups.Default,]约束列表违反:[ConstraintViolationImpl {interpolatedMessage ='{pl.coderslab.passwordValidator.error.message}',propertyPath =,rootBeanClass = class pl.coderslab.charity.entity.User,messageTemplate ='{pl.coderslab.passwordValidator.error.message}'}]
您能帮我解决这个问题吗?我正在使用Spring Boot,jsp,mySql。
实体:
@Entity
@PasswordConfirmed
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
private String email;
private String password;
private String confirmedPassword;
private boolean enabled = false;
@OneToMany
private List<Donation> donations = new ArrayList<>();
@ManyToMany(cascade = CascadeType.PERSIST, fetch = FetchType.EAGER)
@JoinTable(name = "user_role", joinColumns = @JoinColumn(name = "user_id"),
inverseJoinColumns = @JoinColumn(name = "role_id"))
private Set<Role> roles;
Validator界面:
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = {PasswordValidator.class})
public @interface PasswordConfirmed {
String message() default "{pl.coderslab.passwordValidator.error.message}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
验证者:
public class PasswordValidator implements ConstraintValidator<PasswordConfirmed, User> {
@Override
public void initialize(PasswordConfirmed constraint) {
}
@Override
public boolean isValid(User user, ConstraintValidatorContext context) {
return user.getPassword().equals(user.getConfirmedPassword());
}
控制器:
@PostMapping("/createUser")
public String postCreateUserForm(@Valid User user,BindingResult bindingResult, Model model, HttpServletRequest request) throws MessagingException {
if(bindingResult.hasErrors()){
return "user/createUser";
}
userService.saveUser(user);
ConfirmationToken confirmationToken = new ConfirmationToken(user);
confirmationTokenService.saveToken(confirmationToken);
String url = request.getRequestURL().toString().replace("createUser", "");
emailService.sendEmail(user.getEmail(), "Aktywuj konto", url +"confirmAccount?token=" + confirmationToken.getTokenValue());
return "redirect:/";
}
用户服务:
public void saveUser(User user) {
user.setPassword(passwordEncoder.encode(user.getPassword()));
user.setConfirmedPassword(passwordEncoder.encode(user.getConfirmedPassword()));
userRepository.save(user);
}
JSP:
<form:form method="post" modelAttribute="user">
<div class="form-group">
<form:input path="name" type="name" name="name" placeholder="Imię"/>
</div>
<div class="form-group">
<form:input path="email" type="email" name="email" placeholder="Email"/>
</div>
<div class="form-group">
<form:input path="password" type="password" name="password" placeholder="Hasło"/>
</div>
<form:hidden path="roles" value="1"></form:hidden>
<div class="form-group">
<form:input path="confirmedPassword" type="password" name="confirmed_password" placeholder="Powtórz hasło"/>
<form:errors></form:errors>
</div>
<div class="form-group form-group--buttons">
<a href="login.html" class="btn btn--without-border">Zaloguj się</a>
<button class="btn" type="submit">Załóż konto</button>
</div>
</form:form>
这是我的全部代码,也许这会有所帮助:https://github.com/JanDuda6/projectCharity