Skip to content

Commit

Permalink
Fix: password pattern validation method
Browse files Browse the repository at this point in the history
숫자, 문자, 특수문자 조합 정규식을 수정함.
연속된 동일한 문자를 확인하는 로직은 match가 아닌 find 메서드를 이용하여 비밀번호 일부만 해당되어도 true를 반환하도록 수정함.
Github issue #3
  • Loading branch information
honeyl3ee committed Oct 26, 2023
1 parent 28082eb commit 68983de
Showing 1 changed file with 26 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
import javax.validation.constraints.Email;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.Size;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
* 멤버 생성 DTO
Expand Down Expand Up @@ -41,24 +43,39 @@ public Request(String username, String email, String password) {
* @param password 검증할 패스워드
*/
private void validatePasswordPattern(String password) {
if (!isPasswordValid(password)) {
throw new IllegalArgumentException("숫자, 문자, 특수문자 중 2가지 이상을 포함해야 하고, 3회 이상 연속되는 문자는 사용이 불가합니다.");
if (isConsecutiveCharsPattern(password)) {
throw new IllegalArgumentException("동일한 문자를 3회 이상 연속으로 사용할 수 없습니다.");
}
if (!isComplexCharsPattern(password)) {
throw new IllegalArgumentException("숫자, 문자, 특수문자 중 2가지 이상을 포함해야 합니다.");
}
}

/**
* 비밀번호 패턴 검사 로직
*
* @param password 검증할 패스워드
* @return 숫자, 문자, 특수문자가 2개 이상 조합, 동일한 문자가 3회 미만 연속 시 true, 그렇지 않으면 else
* @return 숫자, 문자, 특수문자가 2개 이상을 포함하면 true, 아니면 false
*/
private boolean isPasswordValid(String password) {
String pattern = "^(?=(.*\\\\d.*)(.*[A-Za-z].*|.*[^A-Za-z\\\\d].*))|" +
"(?=(.*[A-Za-z].*)(.*[^A-Za-z\\\\d].*))(?=.*\\\\d.*)|" +
"(?=(.*[A-Za-z].*)(.*\\\\d.*))(.*[^A-Za-z\\\\d].*)$|";
String consecutiveCharsPattern = "(.)\\1{2,}";
private boolean isComplexCharsPattern(String password) {
String complexCharsPattern = "^(?=.*[A-Za-z])(?=.*\\d)(?=.*[^A-Za-z\\d]).{10,}$|" +
"(?=.*[A-Za-z])(?=.*\\d).{10,}$|" +
"(?=.*[A-Za-z])(?=.*[^A-Za-z\\d]).{10,}$|" +
"(?=.*\\d)(?=.*[^A-Za-z\\d]).{10,}$";
Matcher matcher = Pattern.compile(complexCharsPattern).matcher(password);
return matcher.matches();
}

return password.matches(pattern) && !password.matches(consecutiveCharsPattern);
/**
* 비밀번호 패턴 검사 로직
*
* @param password 검증할 패스워드
* @return 동일한 문자가 3회 이상 연속되면 true, 아니면 false
*/
private boolean isConsecutiveCharsPattern(String password) {
String consecutiveCharsPattern = "(.)\\1\\1";
Matcher matcher = Pattern.compile(consecutiveCharsPattern).matcher(password);
return matcher.find();
}
}

Expand Down

0 comments on commit 68983de

Please sign in to comment.