티스토리 뷰
Spring Framework
[Spring Security] 주요 아키텍처 SecurityContextHolder, SecurityContext
터프남 2023. 2. 19. 10:23728x90
인증 저장소
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에 저장된다.
참고
728x90
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- Mac
- 오라클
- maven
- config-location
- Spring Security
- 베리 심플
- docker
- Java
- rocky
- jQuery
- elasticsearch
- LocalDate
- oracle
- intellij
- k8s
- Spring
- 북리뷰
- Bash tab
- JavaScript
- svn
- mybatis
- window
- input
- localtime
- mybatis config
- Kotlin
- Github Status
- springboot
- LocalDateTime
- Linux
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함