강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

박유찬님의 프로필 이미지
박유찬

작성한 질문수

스프링 시큐리티 비밀번호 암호화 시 NullPointerException 에러

해결된 질문

작성

·

277

·

수정됨

0

스프링 시큐리티 사용해서 회원가입을 구현중입니다.

PasswordEncoder를 사용해서 클라이언트에서 받은 비밀번호를 SercurityConfig에 전달해서 암호화를 해야하는데 함수 반환값이 계속 null로 나옵니다.

클라이언트에서 입력한 값은 정상적으로 들어오는 것을 확인했습니다.

뭐가 잘못됐는지 이틀동안 고치고 있는데 안되네요....

아래는 순서대로 UserService, SecurityConfig입니다.

다른 분들 것들도 찾아보면서 해결해보려고 UserService에서 PasswordEncoder부분에 @Autowired도 선언해봤고 class 제일 바깥 부분에 @AllArgsConstructor도 선언해봤지만 도저히 안되네요ㅠㅠ 도움 부탁드립니다.

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

박유찬님의 문제를 확인해보니, UserServiceSecurityConfig에서 PasswordEncoder 관련 설정이 적절해 보입니다. 하지만 PasswordEncoder의 반환값이 null로 나오는 문제는 대개 PasswordEncoder가 제대로 설정되지 않았거나, @Bean으로 등록된 PasswordEncoderSpring 컨텍스트에 의해 올바르게 관리되지 않는 경우에 발생할 수 있습니다.

다음과 같은 점들을 확인해보시는 것이 좋겠습니다:

  1. SecurityConfig 클래스에서 @Bean으로 선언된 passwordEncoder() 메소드가 올바르게 설정되어 있고, 이 메소드가 PasswordEncoder 타입의 인스턴스를 반환하고 있는지 확인해보세요. 또한, 이 메소드가 다른 설정들보다 먼저 호출되어야 합니다.

  2. @Autowired를 사용하여 PasswordEncoder를 주입할 때, Spring이 자동으로 해당 타입의 Bean을 찾아 연결할 수 있도록 해당 Bean이 단 하나만 존재해야 합니다. 여러 개의 PasswordEncoder Bean이 존재한다면, Spring이 어떤 것을 주입해야 할지 판단하지 못해 오류가 발생할 수 있습니다.

  3. 프로젝트의 설정이나 다른 구성 요소에서 PasswordEncoderBean 생성을 덮어쓰고 있지 않은지 확인합니다. 때때로 다른 설정 파일이나 자동 구성으로 인해 기대했던 Bean 설정이 덮어씌워지는 경우가 있습니다.

  4. 애플리케이션을 실행할 때 @SpringBootApplication 어노테이션이 달린 클래스가 최상위 패키지에 위치하고 있는지 확인합니다. Spring Boot는 이 위치를 기준으로 컴포넌트 스캔을 시작하기 때문에, @Bean을 포함한 설정 클래스가 이 위치 밖에 있다면 Spring이 제대로 인식하지 못할 수 있습니다.

이러한 확인 사항들을 점검해도 문제가 해결되지 않는다면, 코드의 다른 부분에서 PasswordEncoderBean을 잘못 참조하거나 사용하고 있는지 전반적으로 다시 살펴보시는 것이 좋습니다.

박유찬님의 프로필 이미지
박유찬
질문자

답변 저장용

UserService 부분에서 생성자를 통해 PasswordEncoder를 주입하니 문제가 해결이 됐다.

image

박유찬님의 프로필 이미지
박유찬

작성한 질문수

질문하기