gpt4 book ai didi

java - Spring 3 基于注解的验证 : password and confirm password

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:42:25 28 4
gpt4 key购买 nike

在我的 Spring 3 MVC 应用程序中,用户需要保存密码,如果他们也能够在保存时确认密码,那将是一个不错的功能。

在 bean 中,我使用基于注释的验证。是否有注释 validator 可用于执行此检查?

经过一番谷歌搜索后,我找到了这个博客:http://gochev.blogspot.com/2010/06/spring-mvc-spring-bean-validation.html .但我想我在这里缺少一个 jar-lib,因为 Eclipse 无法找到/建议任何 jar。任何人都知道我需要什么 jar 才能工作?

提前致谢:)

最佳答案

为了验证密码,我写了以下内容:

约束实现:

 package com.test.web.validation.user;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import javax.validation.Constraint;
import javax.validation.Payload;

@Target({ ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(validatedBy = PasswordsEqualConstraintValidator.class)
public @interface PasswordsEqualConstraint {
String message();

Class<?>[] groups() default {};

Class<? extends Payload>[] payload() default {};
}

package com.test.web.validation.user;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

import com.test.logic.dto.UserDto;

public class PasswordsEqualConstraintValidator implements
ConstraintValidator<PasswordsEqualConstraint, Object> {

@Override
public void initialize(PasswordsEqualConstraint arg0) {
}

@Override
public boolean isValid(Object candidate, ConstraintValidatorContext arg1) {
UserDto user = (UserDto) candidate;
return user.getPassword().equals(user.getPasswordRepeat());
}
}

我的 DTO 对象:

package com.test.logic.dto;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

import com.esldic.web.validation.user.EmailExistsConstraint;
import com.esldic.web.validation.user.PasswordsEqualConstraint;

@PasswordsEqualConstraint(message = "passwords are not equal")
public final class UserDto extends AbstractDto implements Serializable {

private static final long serialVersionUID = 1L;

private Long id;

@NotNull
@Size(min = 3, max = 30)
@EmailExistsConstraint(message = "email is not available")
private String email;

private String username;

@NotNull
@Size(min = 2, max = 30)
private String password;

@NotNull
@Size(min = 2, max = 30)
private String passwordRepeat;
...
}

最后,我的 Controller

package com.test.web.controllers;

import java.util.Set;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.ConstraintViolation;
import javax.validation.Validator;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import com.test.logic.dto.UserDto;

@Controller
public final class SignupController {

@Autowired
private Validator validator;

@RequestMapping(value = "/signup.html", method = RequestMethod.POST)
public @ResponseBody
ModelAndView handleSignupForm(@ModelAttribute UserDto candidate,
HttpServletResponse response) throws ServiceException {
Set<ConstraintViolation<UserDto>> failures = validator
.validate(candidate);

if (!failures.isEmpty()) {
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
return ValidationHelper.validationMessages(failures);

} else {
return userService.create(candidate);
}
}

另外,在 google 中你会发现很多带有 JSR-303 bean 验证的示例。

关于java - Spring 3 基于注解的验证 : password and confirm password,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7239897/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com