2023.07.24.월.TIL

heeh·2023년 7월 24일

TIL

목록 보기
49/82
post-thumbnail

2023.07.24.월

  • if (passwordHistories.size() >= 3)는 왜 >=3?
    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개 이상의 비밀번호 기록이 있어야만 해당 블록 안의 코드가 실행
  • if (passwordHistories.size() > 0)로 수정!!
  • ≥ 3은 passwordHistories에 기록이 3개 이상 쌓여야 발동되기 때문에 3번 미만 비밀번호 변경 시 전 비밀번호가 중복되어 변경이 가능함
  • 0으로 변경해주면 현재 비밀번호, 전 비밀번호, 전전 비밀번호 총 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를 보냄
            }
        }
  • 0으로 변경하면 size()가 아무것도 없을 때 실행 되지만, 실행 될 수록 저장(인식)되는게 0이니까 비밀번호 비교할게 없어지지 않나..?
  • for문도 이상하게 작동함… 돌아가는 조건이 제대로 성립이 안되있는 것 같아…
    • passwordHistories.size()는 0보다 크고 i = 0, i(0) < passwordHistories.size()
1. qqqq123!
2. wwww123!
3. eeee123!
4. rrrr123!
  • 1번 비밀번호에서 1번 비밀번호로 변경 불가능.
  • 2번 비밀번호에서 1번, 2번 비밀번호로 변경 불가능.
  • 3번 비밀번호에서 3번, 2번, 1번 비밀번호로 변경 불가능
  • 마지막 4번 비밀번호에서 4번, 3번, 2번 비밀번호로 변경 불가.
    1번 비밀번호로 변경 가능
  • 해결이닷!
    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를 보냄
                  }
  • 도커, 웹소캣, 레디스, Mockterview
  • 목터뷰
  • 도커/쿠버네티스
profile
공부하자개발하자으쌰으쌰

1개의 댓글

comment-user-thumbnail
2023년 7월 24일

좋은 정보 얻어갑니다, 감사합니다.

답글 달기