Обработка подтверждения пароля на Spring-MVC - PullRequest
2 голосов
/ 17 августа 2010

Я делаю пользователя crud в Spring-Mvc.

Моя модель обладает следующими свойствами:

private Long id;
private String password;
private String username;
private Collection<Authority> myAuthorities;
private boolean isAccountNonExpired;
private boolean isAccountNonLocked;
private boolean isCredentialsNonExpired;
private boolean isEnabled;

Я решил, как показать класс Authority в этом вопросе .

Теперь я хочу, чтобы в моей форме было поле для второго пароля, чтобы подтвердить, что пользователь набрал пароль правильно.

Я не хочу добавлять свойство confirmPassword к модели, поэтому мой вопрос заключается в том, как исправить это наилучшим способом.

Edit:

Все работает с ответом акставта, но мне не хватает способа проверить. У меня есть следующий метод в моем контроллере, но хотя я помещаю @Validate ApplicationUserFormValidator не называется.

    @RequestMapping(method = RequestMethod.POST)
 public ModelAndView create(Model model,
   @Valid @ModelAttribute ApplicationUserForm applicationUserFrom,
   BindingResult result) {
  ModelAndView modelAndView = new ModelAndView();

  if (result.hasErrors()) {
   modelAndView.setViewName(USER_CREATE_FORM);
  } else {
   modelAndView.setViewName(REDIRECT_TO_USER_LIST);
   modelAndView.addObject(USER_FORM_MESSAGE, USER_FORM_ADD_SUCCESSFUL);
   applicationUserService.save(applicationUserFrom.getUser);
  }

  return modelAndView;
 }

Ответы [ 3 ]

5 голосов
/ 20 декабря 2013

добавить Подтвердить пароль в вашем приложении UserFrom class
и добавить функцию проверки в сеттер
это мой лучший способ

private String password;
@NotNull(message="not match")
private String confirmPassword;

public void setPassword(String password) {
    this.password = password;
    checkPassword();//check
}   

public void setConfirmPassword(String confirmPassword) {
    this.confirmPassword = confirmPassword;
    checkPassword();//check
}

private void checkPassword() {
    if(this.password == null || this.confirmPassword == null){
        return;
    }else if(!this.password.equals(confirmPassword)){
        this.confirmPassword = null;
    }
}
2 голосов
/ 17 августа 2010

Вы можете создать вмещающий объект, чтобы сохранить подтверждение:

public class ApplicationUserForm {
    private ApplicationUser user;
    private String confirmPassword;

    ...
}

-

Password: <form:password path = "user.password" />
Confirm password: <form:password path = "confirmPassword" />

Валидатор также работает нормально:

public class ApplicationUserFormValidator implements Validator {
    public void validate(Object target, Errors errors) {
        ApplicationUserForm f = (ApplicationUserForm) target;

        if (!f.getConfirmPassword().equals(f.getUser().getPassword())) ...

        errors.pushNestedPath("user");
        new ApplicationUserValidator().validate(f.getUser(), errors);
        errors.popNestedPath();
    }
    ...
}

РЕДАКТИРОВАТЬ: Если вы используете аннотацию @Valid, вам необходимо зарегистрировать валидатор, используя @InitBinder или в конфигурации, как описано в документах .Вы также можете использовать полностью декларативную проверку в стиле JSR-303, но я не уверен, как она будет работать с бизнес-ограничениями, такими как user.password == confirmPassword.

@InitBinder
public void initBinder(WebDataBinder b) {
    b.setValidator(new ApplicationUserFormValidator());
}
0 голосов
/ 17 августа 2010

То, как я справился с этим, заключалось в том, чтобы поставить подтверждение пароля и "вы уверены, что хотите это сделать?"подтверждение в объекте политики доступа, в котором реализованы детальные правила контроля доступа в контроллере.

Вместо того, чтобы реализовывать управление пользователями с нуля, вы можете использовать готовое решение;например Эммет .(Отказ от ответственности - я автор.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...