Knowledge/Trouble Shooting

@AuthenticationPrincipal 에 null 값이 들어오는 에러

똑똑한망치 2024. 7. 7. 12:10
728x90
반응형

❓문제 상황

 

자꾸 @AuthenticationPrincipal 어노테이션에 null 값이 들어와 NullPointerException 에러가 발생하는 것이였다.

 

💡 디버깅 과정

 

 

위의 과정에서 jwtTokenProvider.getAuthentication(token); 을 통해 생성된 authentication 객체에

정상적으로 값이 생성되는 것을 볼 수 있다.

 

따라서

SecurityContextHolder.getContext().setAuthentication(authentication);

메서드도 정상적으로 실행되었다.

 

 

AuthenticationPrincipal 어노테이션을 통해 얻은 객체 User이 null이 되었다.

따라서 @AuthenticationPrincipal 어노테이션을 천천히 따라가 보았다.

 

이 어노테이션이 붙은 파라미터에 값을 주입해주는 AuthenticationPrincipalArgumentResolver를 들어갔다.

 

 

붉은색으로 표시한 부분에서 문제가 생기는 것으로 판단했다.

하지만, 정상적으로 Authentication 이 생성되고 불러오는 것을 확인했다.

 

그러면 어디가 문제일까..

 

SecurityContextHolder > SecurityContext > Authentication > Principal 이라는 것을 계속 생각했다.

 

그러면 AuthenticationPrincipal이란 Authenticated 된 Principal이구나.

이 Principal을 찾지 못해서 null이 발생하구나.

Principal을 생성하는 곳부터 다시 찾아보자. -> Principal을 생성하는 직접적인 곳이 없으니 Principal을 포함하는 Authentication 객체를 생성하는 곳부터 찾아보자.

 

Authentication 객체 생성하는 부분

 

UsernamePasswordAuthenticationToken 을 따라가 보자.

 

 

직접 principal 객체를 생성해서 넣어주는 생성자를 가지고 있다.

여기서 문제 발견!!!!!

 

나는 principal 객체, 즉 user 객체를 생성하여 넣지 않고 user의 loginId만 넣어주는 것이였다.

따라서 내가 주입한 principal( "test1")과 @AuthenticationPrincipal에서 찾는 principal( test1의 user 객체) 가 일치하지 않아서 문제가 발생한 것이였다!!!!!!

 

문제 해결

 

principal 객체를 생성하여 바로 주입했더니 정상적으로 작동했다.

 

코드를 천천히 뜯어보고 따라가보는 것이 재밌기도 했고 힘들기도 했다.

반응형