if (passwordHistories.size() >= 3) {
for (int i = 0; i < passwordHistories.size(); i++) {
PasswordHistory passwordHistory = passwordHistories.get(i);
// passwordHistories.get(i)를 통해 passwordHistories 리스트에서 i번째 인덱스에 위치한 PasswordHistory 객체를 가져옴
if (passwordEncoder.matches(passwordHistory.getUserPassword(), userDetails.getPassword()))
throw new IllegalArgumentException("최근 3번 사용한 비밀번호는 사용할 수 없습니다.");
// passwordHistory.getUserPassword()(암호화) 된 비밀번호가 userDetails.getPassword()(사용자가 입력한 비밀번호)와 같다면 throw를 보냄
}
}passwordHistories 리스트에 저장된 비밀번호 기록이 3개 이상인 경우에만 실행passwordHistories.size() >= 3은 최근 3번의 비밀번호 기록이 있는지를 확인하는 조건문으로서, 3개 이상의 비밀번호 기록이 있어야만 해당 블록 안의 코드가 실행passwordHistories에 기록이 3개 이상 쌓여야 발동되기 때문에 3번 미만 비밀번호 변경 시 전 비밀번호가 중복되어 변경이 가능함if (passwordHistories.size() > 0) {
for (int i = 0; i < passwordHistories.size(); i++) {
PasswordHistory passwordHistory = passwordHistories.get(i);
// passwordHistories.get(i)를 통해 passwordHistories 리스트에서 i번째 인덱스에 위치한 PasswordHistory 객체를 가져옴
if (passwordEncoder.matches(passwordHistory.getUserPassword(), userDetails.getPassword()))
throw new IllegalArgumentException("최근 3번 사용한 비밀번호는 사용할 수 없습니다.");
// passwordHistory.getUserPassword()(암호화) 된 비밀번호가 userDetails.getPassword()(사용자가 입력한 비밀번호)와 같다면 throw를 보냄
}
}
1. qqqq123!
2. wwww123!
3. eeee123!
4. rrrr123!
List<PasswordHistory> passwordHistories = passwordHistoryRepository.findTop4ByUserOrderByCreatedAtDesc(userDetails.getUser());passwordHistoryRepository에 저장된 비밀번호 Top4개를 불러온다!
for (int i = 0; i <passwordHistories.size(); i++)
int i = 0; 현재 비밀번호(시작 자리 = 0)을 포함할 것이냐! 그렇다
이로써 현재 비밀번호, 과거의 3개 = 총 4개를 설정
ist<PasswordHistory> passwordHistories = passwordHistoryRepository.findTop4ByUserOrderByCreatedAtDesc(userDetails.getUser());
// 최근 3번 사용한 비밀번호 조회
for (int i = 0; i <passwordHistories.size(); i++) {
PasswordHistory passwordHistory = passwordHistories.get(i);
// passwordHistories.get(i)를 통해 passwordHistories 리스트에서 i번째 인덱스에 위치한 PasswordHistory 객체를 가져옴
if (passwordEncoder.matches(profileUpdateDto.getChangePassword(), passwordHistory.getUserPassword()))
throw new IllegalArgumentException("최근 3번 사용한 비밀번호는 사용할 수 없습니다.");
// passwordHistory.getUserPassword()(암호화) 된 비밀번호가 userDetails.getPassword()(사용자가 입력한 비밀번호)와 같다면 throw를 보냄
}
좋은 정보 얻어갑니다, 감사합니다.