[JAVA] 67. 비밀번호 검증

윤설안's avatar
Jul 26, 2025
[JAVA] 67. 비밀번호 검증

Spring Security의 로그인 과정 요약

  1. 사용자가 로그인 폼에 ID / 비밀번호 입력
  1. Security가 내부적으로 UserDetailsService를 통해 해당 ID의 유저 정보를 DB에서 조회
  1. 조회된 비밀번호(DB에 저장된 암호화된 비밀번호)와 사용자가 입력한 비밀번호를 PasswordEncoder.matches()로 비교
  1. 비교 결과가 일치하면 SecurityContext에 인증된 사용자로 등록

문제의 원인

matches()는 "암호화된 비밀번호"와 "입력된 비밀번호"를 비교하는데,
저장된 비밀번호가 암호화되지 않은 문자열이라면 무조건 비교 실패
// 잘못된 회원가입 코드: 암호화 없이 저장됨 userRepository.save(username, password, email); // password는 String
  • 이로 인해 로그인 시 인증 객체(SecurityContext)가 생성되지 않고
  • Spring Security는 사용자를 비인증 상태로 간주해 /main 접근을 차단함

해결 방법: 비밀번호를 암호화해서 저장해야 함

BCryptPasswordEncoder.encode()를 사용해 DB에 저장되는 비밀번호를 반드시 암호화해야 함
public void 회원가입(String username, String password, String email) { String encPassword = bCryptPasswordEncoder.encode(password); // ✅ 비밀번호 암호화 userRepository.save(username, encPassword, email); // ✅ 암호화된 값 저장 }
  • 로그인 시 입력한 비밀번호는 내부적으로 동일한 방식으로 암호화되어 비교되기 때문에
  • 일치 시 인증 객체 생성 성공 → /main 접근 가능
Share article

An's Blog