【发布时间】:2014-03-04 09:33:03
【问题描述】:
我有一个 Spring MVC 控制器,它处理与用户管理有关的请求,包括保存用户详细信息的方法和允许用户重置密码的方法。我想使用验证器来确保用户输入了两次相同的密码。
我的控制器
@Controller
public class UserDetails {
...
@InitBinder
public void binder(WebDataBinder binder) {
binder.addValidators(new PasswordValidator());
}
...
@RequestMapping(value="/saveUserDetails", method=RequestMethod.POST)
public String saveUserDetails(
@ModelAttribute User user) {
...
}
...
@RequestMapping(value="/resetPassword", method=RequestMethod.POST)
public String resetPassword(
@Validated PasswordPair password, BindingResult result) {
...
}
还有验证器
private final static class PasswordValidator implements Validator {
private final static int MIN_LEN=5;
@Override
public boolean supports(Class<?> clazz) {
return PasswordPair.class.isAssignableFrom(clazz);
}
@Override
public void validate(Object target, Errors errors) {
PasswordPair pair = (PasswordPair)target;
//1 impose password rules
if (pair.getPassword().length()<MIN_LEN) {
errors.rejectValue("password", "Too short", "Password must bne at least "+MIN_LEN+" chars");
}
if (!pair.getPassword().equals(pair.getConfirmPassword())) {
errors.rejectValue("confirmPassword", "mustMatch", "passwords must match");
}
}
}
问题在于,当调用 saveUserDetails 时,spring 正在尝试使用密码验证器验证用户。
我尝试将@InitBinder 更改为@InitBinder("password") 或@InitBinder("PasswordPair"),但在这种情况下根本没有任何验证。
如何让它只验证正确的参数?
【问题讨论】:
-
请提供 PasswordPair 的代码,谢谢。
-
公共类 PasswordPair { 字符串密码;字符串确认密码; public String getPassword() { 返回密码; } public void setPassword(String password) { this.password = password; } 公共字符串 getConfirmPassword() { 返回确认密码; } public void setConfirmPassword(String confirmPassword) { this.confirmPassword = confirmPassword; } }
-
请务必在 jsp 中提供代码。 :)
-
我正在使用速度模板。 #set( $layout="templates/nolayout.vm" )
重置密码
-
正在更改为有效并使用 setValidator - 它仍在尝试将验证器应用于传递给 createUser 的用户对象
标签: java spring validation spring-mvc url-routing