SecurityContextHolder 5

24.SpringSecurity 필터, 아키텍쳐 정리

Spring Security Initalization 2개의 WebSecurityConfigurerAdapter 상속클래스가 있다고 가정한다. 설정클래스에서 정의한 여러 API 들을 정의 API에 맞는 클래스에서 Filter Type Bean을 생성 Filter Type Bean 들을 생성하는 클래스는 HttpSecurity ( 각각의 설정클래스의 Filter Type Bean 명단은 SecurityFilterChain의 Filters 필드에 저장 되는 것 기억 ) HttpSecurity의 Filter Type Bean(Filters) 들은 WebSecurity 객체에 저장 됨 WebSecurity의 FilterChainProxy 객체 생성시 FilterChainProxy의 생성자에 SecurityFil..

18.인증 저장소 필터 , SecurityContextPersistenceFilter

SecurityContextPersistenceFilter SecurityContext 객체의 생성, 저장, 조회 를 담당 FilterChainProxy의 Filter 중 2번 째에 위치 접근에 따른 동작 익명사용자의 접근 SecrutityContext 객체를 생성하여 SecurityContextHolder에 저장함 AnonymousAuthenticationFilter 에서 만든 AnonymousAuthenticationToken 객체를 SecurityContext에 저장시킴 인증 시도 시 SecurityContext 객체를 생성하여 SecurityContextHolder에 저장 UsernamePasswordAuthenticationFilter 에서 인증 성공 후 만든 UsernamePasswordAut..

17.SecurityContextHolder, SecurityContext

SecurityContext Authentication 의 보관소, 언제든 Authentication을 꺼내 사용할 수 있도록 제공되는 클래스이다. ThreadLocal 에 저장되어 아무 곳에서 참조가 가능하도록 설계됨 ThreadLocal 은 Thread 하나에 할당 된 저장소이다. 즉 Thread-Safe 하다. ThreadLocal은 인증 완료시 HttpSession 저장되어 Application 전반에서 참조가 가능하다. SecurityContextHolder SecurityContext를 감싸 저장하는 객체, 저장방법은 3가지이다. MODE_THREADLOCAL : 하나의 스레드 당 SecurityContext 를 할당 , default 값 MODE_INHERITABLETHREADLOCAL : ..

16.Authentication

인증, Authentication 스스로 누구인지 증명하는 것이다. Authentication 객체는 사용자의 인증 정보를 담는 Token 개념이다. (UsernameAuthenticationToken , AnonymousAuthenticationToken , RememberMeAuthenticationToken...) 인증 시의 id , password를 담아 인증 검증을 위해 전달되어 사용된다. 인증 후 최종 Authentication 객체에는 사용자 정보를 담은 User 객체와 권한정보인 Authority가 들어있다. Authentication 객체는 SecurityContext에 저장되어 전역적으로 참조가 가능 Authentication authentication = SecurityContextH..

8.AnonymousAuthenticationFilter

AnonymousAuthenticationFilter..? 익명사용자와 인증사용자와의 구분을 위해 만들어진 필터이다. Authentication 객체를 Session에 저장하지 않는다. 화면에 메뉴여부를 판단할때 isAnonymous() , isAuthenticated() 등으로 줄 수 있다. 처리 과정. 자원 접근에 대한 Request AnonymousAuthticationFilter 에서 Session의 SecurityContextHolder 의 SecurityContext에 Authentication 객체가 있는지 확인 있다면 chain.doFilter() 없다면 AnonymousAuthenticationToken 객체를 만들어서 AnonymousUser 객체, ROLE_ANONYMOUS 권한을 저..