목차
- Spring Security 권한 계층 사용하기 - @RoleHierarcy
- Spring Security - DelegateFilterProxy
- Spring Security - Remember Me와 관련된 인증 API - RememberMeConfigurer
- Spring Security - RembmerMeAuthenticationFilter
- Spring Security - SessionManagementFilter & ConcurrentSessionFilter
- Spring Security - 인가 API ExpressionUrlAuthorizationConfigurer
- Spring Security - Security 설정을 위한 WebSecurityConfigurerAdatper
- Spring Security - AuthenticationProvider
- Spring Security - AuthenticationManager
- Spring Security - UsernamePasswordAuthenticationFilter & AbstractAuthenticationProcessingFilter
- Spring Security - SecurityContextHolder 와 SecurityContext
- Spring Security - Authentication 객체
참고
Spring Security - SecurityContextHolder 와 SecurityContext
인증을 진행하면서 생성된 Authentication 객체는 SecurityContext 객체 내에 저장된다.
저장된 Authentication 객체를 저장하고 가져오기 위해서 SecurityContext는 getAuthentication 메소드와 setAuthentication 메소드를 제공한다.
SecurityContext.java
public interface SecurityContext extends Serializable { |
SecurityContext 인터페이스의 대표적인 구현체로는 SecurityContextImpl 클래스가 있다.
SecutiryContextHolder
SecurityContext를 ThreadLocal에 저장하기 위한 객체
SecurityContextHolder 내에는 ThreadLocal 객체를 가지고 있고, 이 ThreadLocal 객체에 SecurityContext 객체를 저장한다. SecurityContextHolder 가 ThreadLocal 에 SecurityContext 를 저장하는 전략은 3가지가 있다.
| |
MODE_THREADLOCAL
- 한 스레드당 securityContext를 저장하고 접근이 가능하다
MODE_INHERITABLETHREADLOCAL
- 메인 스레드와 자식 스레드에서 동일한 SecurityContext를 갖고 접근이 가능하다
MODE_GLOBAL
- 응용 프로그램내에서 단 하나의 SecurityContext를 저장하고 모두 접근이 가능하다.
SecurityContextHolder는 ThreadLocal에 SecurityContext 객체를 저장하거나 가져오기 위해 setContext 메소드와 getContext 메소드를 제공한다.
// SecurityContext 객체를 ThreadLocal에 저장한다. |
SecurityContextHolder 내에는 SecurityContextHolderStrategy 객체를 가진다. 바로 이 SecurityContextHolderStrategy 기본 구현체로 ThreadLocalSecurityContextHolderStrategy 가 있고 해당 객체내에 ThreadLocal 객체가 존재한다.