작성
·
572
·
수정됨
0
안녕하세요
인프런 강의 들으면서 모르는 부분들은 찾아가면서 공부하고 있는 학생입니다.
security 강의 듣고 프로젝트를 생성해서 연습하다가 로그인하는 것까지는 구현이 된 것 같은데
스프링필터 설정에서 한 /memo/** 주소에 접근이 가능해졌다면 시큐리티 로그인이 잘 작동한 게 맞을까요 ?..
그리고 memoForm 페이지로 입장하면 currentUser가 null로 확인되고 메모를 저장하려고 시도하면
당연히 currentUser에 null이 들어가있어서 NullPointerException 오류가 나게 돼요.
왜 로그인은 되었는데 currentUser에 아무 값도 들어 있지 않은 건지 이유를 잘 모르겠습니다.
저와 비슷한 문제를 해결하신 경험이 계신 분이 있다면 어느 부분에서 수정을 해야 할 지 힌트라도 알려주시면 감사하겠습니다 ( •_ •̥ ˳ ˳ )
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
김지현님의 질문에 대해 답변 드리겠습니다.
스프링 시큐리티를 적용한 뒤 /memo/**
주소에 접근할 수 있다면, 시큐리티 설정 자체에는 문제가 없는 것으로 보입니다. 하지만 currentUser
가 null
로 나오는 것은 문제가 있는 것이며, 이는 여러 가지 원인이 있을 수 있습니다.
첫 번째로, @AuthenticationPrincipal
어노테이션이 현재 인증된 사용자를 제대로 가져오지 못하고 있을 수 있습니다. 만약 UserDetailsService
를 커스터마이징하여 사용 중이라면, loadUserByUsername
메서드 구현이 올바르게 되었는지 확인해 보세요. 이 메서드는 사용자의 인증 정보를 UserDetails
객체로 반환해야 합니다.
또한, 시큐리티 설정에서 적절한 AuthenticationManager
, AuthenticationProvider
, 또는 UserDetailsService
가 빈(Bean)으로 등록되어 있는지 확인해 보셔야 합니다. 기본 InMemoryUserDetailsManager
대신 사용자 지정 UserDetailsService
를 사용하는 경우, 해당 빈을 등록해야 합니다. 참고하실 수 있도록 관련 문서의 링크를 첨부해 드립니다.
UserDetailsService
변경 방법: Change the UserDetailsService and Add User Accounts마지막으로, AuthenticationPrincipal
이 기대하는 타입인 MemoUser
가 현재 세션의 인증 정보(Principal
)와 일치하는지도 확인해 보셔야 합니다.
코드의 문제점을 파악하기 위해서는 사용 중인 시큐리티 설정 및 UserDetailsService
의 구현 내용도 필요할 수 있으니, 필요하신 경우 코드와 함께 추가적인 질문을 해 주시면 더 자세히 안내해 드릴 수 있을 것 같습니다.
이상으로 답변을 마치겠습니다. 추가적인 도움이 필요하시면 언제든지 문의해 주세요.