728x90
Validation을 공부하다가 org.passy를 처음으로 접하게 되었다.
비밀번호 규칙을 강제하는 라이브러리이다.
비밀번호 검증과 관련하여 간편하게 유효성 검사를 수행할 수 있다
의존성추가
<dependencies>
<dependency>
<groupId>org.passay</groupId>
<artifactId>passay</artifactId>
<version>1.6.4</version>
</dependency>
</dependencies>
커스텀 애노테이션 정의하기 위해 ConstraintValidator 구현하여 만들기
import org.passay.*;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.util.ArrayList;
import java.util.List;
public class PasswordRuleValidator implements ConstraintValidator<Password, String> {
private static final int MIN_COMPLEX_RULES = 2;
private static final int MAX_REPETITIVE_CHARS = 3;
private static final int MIN_SPECIAL_CASE_CHARS = 1;
private static final int MIN_UPPER_CASE_CHARS = 1;
private static final int MIN_LOWER_CASE_CHARS = 1;
private static final int MIN_DIGIT_CASE_CHARS = 1;
@Override
public boolean isValid(String password, ConstraintValidatorContext context) {
List<Rule> passwordRules = new ArrayList<>();
passwordRules.add(new LengthRule(8, 30));
CharacterCharacteristicsRule characterCharacteristicsRule =
new CharacterCharacteristicsRule(MIN_COMPLEX_RULES,
new CharacterRule(EnglishCharacterData.Special, MIN_SPECIAL_CASE_CHARS),
new CharacterRule(EnglishCharacterData.UpperCase,MIN_UPPER_CASE_CHARS),
new CharacterRule(EnglishCharacterData.LowerCase,MIN_LOWER_CASE_CHARS),
new CharacterRule(EnglishCharacterData.Digit,MIN_DIGIT_CASE_CHARS));
passwordRules.add(characterCharacteristicsRule);
passwordRules.add(new RepeatCharacterRegexRule(MAX_REPETITIVE_CHARS));
PasswordValidator passwordValidator = new PasswordValidator(passwordRules);
PasswordData passwordData = new PasswordData(password);
RuleResult ruleResult = passwordValidator.validate(passwordData);
return ruleResult.isValid();
}
}
애너테이션 생성
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = PasswordRuleValidator.class)
public @interface Password {
String message() default "패스워드가 조건과 맞지않음";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
- @Target : 적용할 대상의 타입 지정
- @Retention : 언제까지 효력을 유지하고 살아남는지 지정
- @Constraint : 빈 밸리데이션 제약 사항을 포함하는 애너테이션임을 의미
- message() : 유효성 검증 실패할때 표시할 문자열
- Class<?>[] groups() : 메서드를 사용해서 그룹을 지정하면 밸리데이션을 그룹별로 구분해서 적용가능
- Class<? extends Payload>[] payload() : 밸리데이션 클라이언트가 사용하는 메타데이터를 전달하기 위해 사용된다
'개발 이론 > Spring' 카테고리의 다른 글
[Spring] flyway - BaseJavaMigration? (0) | 2023.11.13 |
---|---|
[Spring] flyway?? DB 마이그레이션?? (1) | 2023.11.13 |
[Spring] @ModelAttribute와 @RequestBody에 대해 (1) | 2023.11.09 |
[Spring] Spring Boot와 데이터베이스 (0) | 2023.11.07 |
[Spring] SpringBoot 테스트에 테스트용 데이터베이스 연결 (0) | 2023.11.07 |