인프런 커뮤니티 질문&답변

김동현님의 프로필 이미지

작성한 질문수

스프링 시큐리티 완전 정복 [6.x 개정판]

로그 아웃 – logout() -1

invalidateHttpSession, clearAuthentication 메서드에 관하여

24.06.19 17:09 작성

·

118

0

안녕하세요 강의 잘 수강하고 있습니다. 질문이 있어 글 남기게 되었습니다.

 

SecurityContext 는 기본적으로 SecurityContextHolder에 의해 관리되며, 기본적으로 ThreadLocal 변수에 저장된다고 알고 있습니다. TreadLocal 은 스레드별로 독립적으로 생성되는 변수라고 알고 있는데,

 

그러면 invalidateHttpSession 메서드는 서버의 세션을 무효화하는 기능이고, clearAuthentication 메서드는 현재 스레드의 SecurityContext 에서 Authenitcation 을 삭제하는거라고 이해하면 될까요?

 

 

답변 2

0

정수원님의 프로필 이미지
정수원
지식공유자

2024. 06. 27. 16:40

네 맞습니다.

스프링 시큐리티에서 Authentication 은 SecurityContext 에 저장되고 SecurityContext 은 스레드 로컬에 저장됩니다.

그리고 기본적으로 SecurityContext 은 세션에 저장됩니다.

세션에 저장되는 이유는 사용자의 인증 상태를 계속 유지하기 위함이고 스레드 로컬에 저장하는 이유는 각 사용자별 즉 스레드별로 인증상태를 구분하기 위함이라고 생각하시면 됩니다.

김동현님의 프로필 이미지
김동현
질문자

2024. 07. 01. 14:32

강사님 답변 감사합니다!

0

인프런 AI 인턴님의 프로필 이미지

2024. 06. 21. 17:11

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

네, 님의 이해하신 바는 맞습니다. invalidateHttpSession 메서드는 사용자의 HTTP 세션을 무효화하는 역할을 합니다. 이는 로그아웃과 같은 상황에서 사용자의 세션을 안전하게 종료시키는 데 필요한 작업입니다. 반면, clearAuthentication 메서드는 SecurityContext에서 Authentication 객체를 제거하여 현재 스레드의 인증 정보를 제거하는 역할을 합니다. 이는 SecurityContextHolder에 저장되어 있는 인증 정보를 초기화하고자 할 때 사용됩니다. SecurityContextHolder는 기본적으로 ThreadLocal을 사용하여 각 스레드마다 독립적인 SecurityContext를 관리하므로, clearAuthentication은 호출된 스레드의 인증 상태만 영향을 미칩니다.

이러한 메서드들은 스프링 시큐리티의 SecurityContext를 조작하는 데 필수적인 도구들이며, 보안 관련 작업을 수행할 때 유용하게 사용됩니다.