SecurityContextHolder
- SecurityContextHolder - SecurityContext - Authentication
- SecurityContextHolder는 쓰레드로컬.
Authentication
principal
- 누구에 해당하는 정보
- UserDetailsService에서 리턴한 객체
- Object 타입이긴 하지만, UserDetailsService에서 리턴한 값이기 때문에 사실상 UserDetails 타입.
authrities
- "ROLE_USER", "ROLE_ADMIN" 등 Principal이 가지고 있는 '권한'
- 인증 이후 인가 및 권한 확인할 때 이 정보를 참조한다.
UserDetailsService
- 유저정보를 UserDetails 타입으로 가져오는 DAO인터페이스.
AuthenticationManager
- UserDetailsService를 이용해서 인증한다.
AuthenticationManager와 Authentication의 관계.
- 스프링 시큐리티에서 인증(Authentication)은 AuthenticationManager가 한다.
- AuthenticationManager는 하나의 메서드선언부를 가진 인터페이스다.
Authentication authenticate(Authentication authentication) throws AuthenticationExeption;
- 인자로 받은 authentication이 유효한 인증인지 확인하고 Authenticaion객체를 리턴한다.
- 인증 확인 과정에서 비활성계정, 잘못된 비밀번호, 잠긴계정등의 에러를 던질 수 있다.
- 인자로 받은 Authentication
- formLogin할 때 입력한 정보.
- Principal : "username"
- Credential : "password"
- formLogin할 때 입력한 정보.
- 리턴된 Authentication
- 인증된 Authentication.
- UsernamePasswordToken
- Principal : UserDetailsService에서 리턴하는 UserDetails.
- Credential : 인증됐으므로 Credential은 비어있다.
- GrantedAuthorities : 권한
- 인증된 Authentication.
- 보통 구현체로 ProviderManager를 사용한다.
ThreadLocal
- java.lang 패키지에서 제공하는 쓰레드 범위 변수. 즉 쓰레드 수준의 데이터저장소.
- 같은 쓰레드 내에서만 공유.
- 따라서 같은 쓰레드 내라면 위치상관없이 호출가능. 매개변수로 넘겨줄 필요 없다.
- SecurityContextHolder의 기본전략.
AuthenticationManager를 통해 Authentication을 만들고, 만든 Authentication을 SecurityContext에 set해준다.
그렇다면 언제 set해주는 걸까? 그 공부는 내일!
'JAVA > SPRING' 카테고리의 다른 글
[SPRING MVC] Formatter (2) | 2019.10.14 |
---|---|
[SPRING SECURITY] 1012 공부(아키텍쳐 마지막 정리.) (2) | 2019.10.12 |
[spring security] TEST방법. (1) | 2019.10.11 |
[spring security]레거시 프로젝트에 스프링 시큐리티를 적용해보자.(1) (0) | 2019.09.14 |
[SPRING] 스프링부트 테스트관련 어노테이션 정리 (0) | 2019.08.16 |