• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

spring security 문제

24.02.19 16:22 작성 조회수 183

0

강의를 따라 pom.xml과 application.yml에 작성했던 spring security 관련 내용들을 주석 해제한 후 SecurityConfig.java에 webSecurityCustomizer()를 추가하고 실행했는데 사이트에 연결할 수 없다고 합니다.

 

pom.xml

application.yml

 

SecurityConfig.java

사이트에 연결할 수 없음 상태가 지속되다가 어느 순간 console에 올라오는 에러 메시지는 다음과 같습니다.

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userDetailsService' defined in class path resource [kr/co/joneconsulting/myrestfulservice/config/SecurityConfig.class]: Failed to instantiate [org.springframework.security.core.userdetails.UserDetailsService]: Factory method 'userDetailsService' threw exception with message: null

 

강의와 동일하게 작성한 것 같은데 원인을 잘 모르겠습니다.

 

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.02.21

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

문제 상황에 대한 설명을 감사드리며, SecurityConfig.javauserDetailsService() 메서드에서 예외가 발생하는 이유에 대해 몇 가지 가능성을 살펴보면 좋겠습니다.

  1. UserDetails 객체 생성 시 입력한 값들이 예상치 못한 null을 포함하고 있는지 확인해 주세요. username, password, authorities에 정상적인 값을 제공했는지 다시 확인이 필요합니다.

  2. BCryptPasswordEncoder 를 사용할 때 passwordEncoder 빈이 정상적으로 생성되었는지, 및 제대로 참조되고 있는지 확인합니다.

  3. 생성된 UserDetailsService 빈과 관련된 다른 설정이 충돌하고 있지 않은지 살펴볼 필요가 있습니다. 예를 들어 SecurityConfig 외의 다른 곳에서 UserDetailsService 타입의 빈이 만들어져서 충돌을 일으킬 수도 있습니다.

  4. 코드의 다른 부분에서 UserDetailsService 에 의존하는 다른 빈들이 먼저 로드되어서 생기는 순환 참조 문제가 있는지 검토해 볼 수도 있습니다.

  5. InMemoryUserDetailsManager 를 사용하는 방식에 문제가 없는지, 혹시 놓친 부분이 없는지 전체적인 코드 흐름을 따라 가며 점검해 보세요.

예외 메시지에서 ‘null’이 제시된다면 특정 빈을 생성하거나 참조할 때 필요한 값이나 참조가 잘못되었을 가능성이 높습니다. 디버거를 사용하여 userDetailsService 메서드 실행 시 어느 부분에서 예외가 발생하는지 상세하게 확인하시는 것도 좋은 방법입니다.

마지막으로, 에러 메시지만으로는 한정된 정보만 제공되므로, 보다 정확한 원인 파악을 위하여 전체 SecurityConfig 클래스의 코드를 점검하는 것이 필요합니다. 그리고 스프링 부트 관련 문서를 참고하면서 추가적인 해결 방안을 모색해보세요.

Spring Security 참고 문서:
- Spring Boot Reference Documentation on Spring Security
- Spring Security Reference Guide

상세한 로그 메시지나 코드를 제공해 주시면 더 정확한 도움을 드릴 수 있습니다. 문제 해결을 위한 추가 질문이 있으시면 언제든지 연락 주세요.

진 유님의 프로필

진 유

질문자

2024.02.23

제가 작성한 userDetailsService()에 문제가 있었습니다.

return을 userDetailsService로 하지 않고 new userDetailsService()로 해서 생긴 문제였던 것 같습니다.

답변 감사합니다.