SignUpRequestDto
@Pattern(regexp = "^(?=.*[A-Za-z])(?=.*\\d)(?=.*[\\p{Punct}])[A-Za-z\\d\\p{Punct}]{8,20}$",
message = "비밀번호는 최소 8자리 이상, 영문, 특수문자를 1자 이상 포함되어야 합니다.")
@NotBlank(message = "비밀번호를 입력해주세요.")
private String password;
Dto 에서 위와 같이 입력해서 비밀번호 패턴을 제한할 수 있다.
PasswordEncoder
@Component
public class PasswordEncoder {
public String encode(String rawPassword) {
return BCrypt.withDefaults().hashToString(BCrypt.MIN_COST, rawPassword.toCharArray());
}
public boolean matches(String rawPassword, String encodedPassword) {
BCrypt.Result result = BCrypt.verifyer().verify(rawPassword.toCharArray(), encodedPassword);
return result.verified;
}
}
UserService
String password = passwordEncoder.encode(signupRequestDto.getPassword());
Dto 로 부터 입력받은 비밀번호를 위와 같이 encode 를 통해서 인코딩해서 데이터베이스로 전달할 수 있다.
if (!passwordEncoder.matches(signinRequestDto.getPassword(), user.getPassword())) {
throw new UnauthorizedPasswordException();
}
matches 메서드를 이용해서 앞에는 입력받은 비밀번호를, 뒤에는 인코딩되어있는 비밀번호를 넣어서
두 비밀번호가 일치하는지 확인할 수 있다.
두 비밀번호가 일치하면 true 를 반환하기 때문에 앞에 ! 가 붙어서 비밀번호가 일치하지 않으면 위와 같은 예외처리를
하는 것을 확인할 수 있다.
'컴퓨터 프로그래밍 > Spring' 카테고리의 다른 글
[Spring] QueryDSL (1) | 2024.10.03 |
---|---|
[Spring] Lazy Loading 과 Eager Loading 의 차이, N+1 Problem 과 해결 방법 (1) | 2024.10.03 |
[Spring] OAuth2.0 Kakao 소셜 로그인 기능 구현 (0) | 2024.09.29 |
[Spring] S3 기능 구현 (1) | 2024.09.28 |
[Spring] Entity 연관관계 설정 코드 (0) | 2024.09.27 |