String password = passwordEncoder.encode(requestDto.getPassword());
String confirmPassword = passwordEncoder.encode(requestDto.getConfirmPassword());
if(!passwordEncoder.matches(password, confirmPassword)) {
throw new IllegalArgumentException("비밀번호를 다시 확인해주세요.");
}
String confirmPassword = requestDto.getConfirmPassword();
confirmPassword는 저장할 데이터가 아니기 때문에 이 값을 암호화하지 않은 채로 가져왔다.
하지만 여전히 matches 함수는 false값이 나왔다.
boolean matches(CharSequence rawPassword, String encodedPassword);
matches() 메서드의 첫 번째 인자는 평문이어야 한다.
String password = passwordEncoder.encode(requestDto.getPassword());
String confirmPassword = requestDto.getConfirmPassword();
if(!passwordEncoder.matches(confirmPassword, password)) {
throw new IllegalArgumentException("비밀번호를 다시 확인해주세요.");
}
confirmPassword는 requestDto에서 평문 상태 그대로 가져오고 matches 메서드의 첫 번째 인자로 넣었다.
PasswordEncoder 인터페이스에는
String encode(CharSequence rawPassword);
boolean matches(CharSequence rawPassword, String encodedPassword);
default boolean upgradeEncoding(String encodedPassword) {
return false;
}
세 가지 메서드가 있다.
matches 메서드에는 평문 비밀번호, 암호화된 비밀번호 순서대로 들어가야 한다.