티스토리 뷰

728x90

인증 저장소

SecurityContext

  • Authentication 객체가 저장되는 보관소로 필요 시 언제든지 Authentication 객체를 꺼내어 쓸 수 있도록 제공되는 클래스
  • ThreadLocal에 저장되어 아무 곳에서나 참조가 가능하도록 설계함.
  • 인증이 완료되면 HttpSession에 저장되어 어플리케이션 전반에 걸쳐 전역적인 참조가 가능하다.

SecurityContextHolder

  • 인증된 사용자 정보를 담는 그릇? 이라고 생각하는게 좋을 것 같다.
  • ScurityContext 객체 저장 방식
    • MODE_THREADLOCAL: 스레드 당 SecurityContext 객체를 할당, 기본값
    • MODE_INHERITABLETHREADLOCAL: 메인 스레드와 자식 스레드에 관하여 동일한 SecurityContext를 유지
    • MODE_GLOBAL: 응용 프로그램에서 단 하나의 SecurityContext를 저장한다.
  • SecurityContextHolder.clearContext(): SecurityContext 기존 정보 초기화
  • https://ohtaeg.tistory.com/8 

Authentication 객체를 꺼내오는 방법

Authentication authentication = SecurityContextHolder.getContext().getAuthentication()
Thread Local이란?
Thread마다 고유하게 할당된 저장공간. 다른 쓰레드로부터 안전하다.
https://javacan.tistory.com/entry/ThreadLocalUsage 참조

흐름

1) 사용자가 로그인

2) 서버가 로그인 요청을 받고 서버에서 하나의 스레드를 생성 => 각 스레드의 전역저장소마다 스레드마다 생성됨. ThreadLocal에 저장

3) 인증 필터가 인증을 시도 ex) UsernamePasswordAuthenticationFilter

4) 인증에 실패했을 경우 SecurityContext 객체를 초기화, SecurityContextHolder.clearContext() 

5) 인증에 성공했을 경우 SecurityContext 객체 안에 최종적으로 인증이 성공한 객체를 담는 작업을 한다.

6) 최종적으로 SPRING_SECURITY_CONTEXT라는 이름으로 HttpSession에 저장된다.

 

참고

https://www.inflearn.com/course/%EC%BD%94%EC%96%B4-%EC%8A%A4%ED%94%84%EB%A7%81-%EC%8B%9C%ED%81%90%EB%A6%AC%ED%8B%B0

 

스프링 시큐리티 - Spring Boot 기반으로 개발하는 Spring Security - 인프런 | 강의

초급에서 중.고급에 이르기까지 스프링 시큐리티의 기본 개념부터 API 사용법과 내부 아키텍처를 학습하게 되고 이를 바탕으로 실전 프로젝트를 완성해 나감으로써 스프링 시큐리티의 인증과

www.inflearn.com

 

728x90
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함