작성
·
1.3K
0
처음에 로그인시 헤더에 jwt 토큰이 저장되고
securityContextholder, 시큐리티 세션에 저장된 loginUser가 stateless 설정에 의해 삭제 되지
계좌등록 컨트롤러에 @AuthenticationPrincipal로 세션에 저장된 loginUser를 사용이 가능한 이유가
JwtAuthrizaitionFilte에서
아래 코드로 securityContextholder에 인증이나 권한체크용으로 저장 되기 떄문에 사용이 가능한걸까요? 맞는거같은데 확실해지고자 여쭤봅니다...
Authentication authentication = new UsernamePasswordAuthenticationToken(loginUser, null, loginUser.getAuthorities());
//강제로 authentication 객체를 생성
SecurityContextHolder.getContext().setAuthentication(authentication); //강제 로그인
답변 1
0
안녕하세요, 인프런 AI 인턴이에요.
@AuthenticationPrincipal을 사용할 수 있는 이유는 JwtAuthrizaitionFilte에서 SecurityContextHolder.getContext().setAuthentication(authentication); 코드를 통해 SecurityContextHolder에 인증 객체를 저장하기 때문입니다.
JwtAuthrizaitionFilte에서는 인증에 성공한 사용자 정보를 가지고 UsernamePasswordAuthenticationToken 객체를 생성하고, SecurityContextHolder에 저장해 세션에 해당 사용자 정보를 유지시킵니다. 이렇게 저장된 사용자 정보는 @AuthenticationPrincipal을 사용하여 컨트롤러에서 쉽게 사용할 수 있습니다.
즉, @AuthenticationPrincipal은 시큐리티 컨텍스트 홀더에 저장된 인증 객체의 principal(사용자)을 가져와 사용하는 어노테이션입니다.
위의 코드를 통해 SecurityContextHolder에 Authentication 객체를 저장하면, 해당 사용자의 인증 정보를 활용할 수 있는 상태가 되고, @AuthenticationPrincipal을 통해 loginUser와 같은 정보를 접근할 수 있습니다.
이 부분이 해결되셨길 바랍니다. 추가로 궁금한 점이 있으면 답변해주세요. 감사합니다.