交叉验证Java

问题描述 投票:0回答:1

我正在尝试进行跨领域验证。它是简单的密码,并确认密码验证。当我添加具有不同密码验证功能的用户时,显示错误“密码错误”。但是,当我尝试使用正确的密码添加用户时,出现错误提示:

对类[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>
java mysql spring jsp bean-validation
1个回答
0
投票

这是我的全部代码,也许这会有所帮助:https://github.com/JanDuda6/projectCharity

© www.soinside.com 2019 - 2024. All rights reserved.