I wrote my first custom validator for password confirmation. It doesn't work. I can't find the cause. Can someone point out what is missing from the following code:
Code:
public enum PasswordMode {
SAME, DIFFERENT;
}
Code:
@Target( { TYPE, ANNOTATION_TYPE })
@Retention(RUNTIME)
@Constraint(validatedBy = PasswordConstraintValidator.class)
@Documented
public @interface CheckPassword {
String message() default "{com.abc.myapp.account.web.CheckPassword}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
PasswordMode value();
}
Code:
@CheckPassword(value=PasswordMode.SAME)
public final class PasswordResetForm {
@NotNull
private String password;
@NotNull
private String passwordConfirmation;
// .....
/**
* @return the password
*/
public String getPassword() {
return password;
}
/**
* @param password the password to set
*/
public void setPassword(String password) {
this.password = password;
}
/**
* @return the passwordConfirmation
*/
public String getPasswordConfirmation() {
return passwordConfirmation;
}
/**
* @param passwordConfirmation the passwordConfirmation to set
*/
public void setPasswordConfirmation(String passwordConfirmation) {
this.passwordConfirmation = passwordConfirmation;
}
}
Code:
public final class PasswordConstraintValidator implements
ConstraintValidator<CheckPassword, PasswordResetForm> {
private PasswordMode passwordMode;
public void initialize(CheckPassword constraintAnnotation) {
this.passwordMode = constraintAnnotation.value();
}
public boolean isValid(PasswordResetForm passwordResetForm, ConstraintValidatorContext constraintContext) {
if (passwordResetForm == null)
return true;
if (passwordMode == PasswordMode.SAME)
return passwordResetForm.getPassword().equals(passwordResetForm.getPasswordConfirmation());
else
return !passwordResetForm.getPassword().equals(passwordResetForm.getPasswordConfirmation());
}
}