@AuthenticationPrincipal null 현상 해결이 되지 않습니다 .. ㅠㅠ

23.08.22 14:40 작성 조회수 838

0

Filter 처리 후 SecurityContextHolder에 주입

그 후 컨트롤러에서 @AuthenticationPrincipal 로 가져올 시 null 현상이 일어납니다.

컨트롤러 단에서 SecurityContextHolder 에서 꺼내서 Principal 가져올 시 존재하는데

어노테이션을 통하여 사용하려고 하니 null 이 뜨네요..

혹시 무언가 잘못된 부분이 있을까요 ..?

Security 인증은 따로 사용하지 않고 있습니다.

Spring Cloud Gateway ->모듈 Fileter -> Controller 로 사용중입니다.

SCG에서 토큰 검증 후 uid를 모듈로 넘겨준 후 공통으로 사용하기 위해 AuthenticationPrincipal를 사용하려 합니다.

FIlter

TokenProvider

Test Controller

User Entity UserDetails Override

 

답변 1

답변을 작성해보세요.

-1

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.08.23

안녕하세요, 인프런 AI 인턴이에요. Spring Security에서 @AuthenticationPrincipal 어노테이션을 사용하여 Principal을 가져올 때 null 현상이 발생하는 문제를 겪고 계시군요.

@AuthenticationPrincipal 어노테이션은 Spring Security에서 인증된 사용자를 가져오기 위해 사용됩니다. 하지만 어떤 이유로 인해 해당 어노테이션을 통해 Principal을 가져오지 못하는 문제가 발생할 수 있습니다.

먼저, Filter에서 SecurityContextHolder에 Principal을 설정하신 후에 컨트롤러에서 @AuthenticationPrincipal 어노테이션을 통해 가져올 때 null 현상이 발생하는 상황이라고 이해했습니다. 이 경우에는 FilterChain을 통해 요청이 처리되고 난 뒤에 Principal이 설정되어야 합니다.

Filter에서 SecurityContextHolder에 Principal을 설정하는 코드가 어떻게 되어 있는지 확인하시고, 설정하는 시점과 Principal을 가져오는 시점이 일치하는지 확인해보세요. Principal을 설정하는 시점이 요청 처리 이후일 경우, 컨트롤러에서는 아직 Principal이 설정되지 않은 상태이기 때문에 null이 반환될 수 있습니다.

또한, Filter와 Controller 사이에서 Principal을 공유하기 위해 사용하시는 방법이 올바른지도 확인해보세요. 요청이 처리되는 동안 Principal이 유지되어야 하는데, 어떤 이유로 인해 Principal이 삭제되었을 수도 있습니다.

만약 위의 확인 과정으로 문제를 해결하지 못하신다면, 좀 더 구체적인 코드나 설정 내용을 제공해주시면 더 나은 도움을 드릴 수 있을 것 같아요. 하지만, Filter와 SecurityContextHolder, Principal을 사용하는 부분은 복잡한 상황일 수 있으므로, 해당 문제에 대한 해결책을 찾기 어렵다면 Spring Security 공식 문서나 Spring Security 커뮤니티에서 도움을 얻을 수 있을 거예요.
요청하셨던 내용에 대한 답변이 도움이 되었길 바랍니다. 어떠한 추가 질문이나 도움이 필요하시면 언제든지 말씀해주세요. 좋은 하루 되세요!