
전체 흐름 정리
---- 초기화 작업 -----
설정 클래스들을 만들고 API를 정리하고 API들이 각각 요청을 받아 처리하게 구성.
SpringSecurityConfigure 클래스를 만들면 시큐리티가 초기화될 때
API와 구성대로 HttpSecurity 클래스 Filter들을 생성한다.
이 필터들은 WebSecurity 클래스에게 전달이 된다.
각 설정대로 만들어진 필터들을 전달 받는다.
WebSecurity는 FilterChainProxy 클래스의 Bean 객체를 생성한다.
그러면 FilterChainProxy는 WebSecurity가 전달한 Filter 목록을 가지고 있다.
그리고 DelegatingFilterProxy(서블릿필터) 클래스도 초기화 할 때 FilterChainProxy가 bean으로 생성.
사용자에게 요청이 들어왔을 때
springSecurityFilterChain의 이름을 가진 빈을 찾아 요청을 위임한다.
springSecurityFilterChain == FilterChainProxy 이다
---- 여기까지 초기화 과정 -----
초기화 때 필터체인프록시가 자기가 전달 받은 필터들에게 요청을 맡긴다.
필터들이 체인으로 연결되어 자신의 역할이 끝나면 다음 필터로 요청을 보내면서 일을 처리해나간다.
---- 필터 작동 순서 ----
사용자 요청이 들어온다.
SecurityContextPersistenceFilter가 받는다.
1-2 HttpSessionSecurityContextRepository 클래스를 가지고 있는데 SecurityContext 객체를 생성하고 Session에 저장하고
Session에 저장된 securityContext를 참조하고 저장하는 클래스이다.
1-3 loadContext -- 이 사용자가 이전에 SecurityContext에 저장된 이력이 있는지 체크
1-4 사용자 이력이 없으면
새로운 SecurityContext 생성 후 다음 필터로 전달(익명, 이력이 없는 사용자)
인증필터는 인증이 성공한 다음 후속처리
ConcurrentSessionFilter
1) 동일한 계정으로 두 명 이상이 접속했을 때 작동
RememberMeAuthenticaFilter
-- 인증객체가 null일 경우 이 필터가 작동한다.
-- 현재 사용자의 request header에 remember-me 쿠키값을 저장한 상태로왔을 때
접속한 사용자 대신에 인증처리를 시도한다.
-- remember-me 기능을 활성화 하고 인증을 받았다면 이 필터가 동작한다.
-- 인증받은 사용자가 접근할 때는 작동하지 않는다.
AnoymousAuthenticationFilter
-- 익명 사용자용 필터
-- 어떤 사용자가 인증시도도 하지 않고 권한도 없이 자원에 접근하는 경우 작동.
-- 익명 사용자 인증 토큰을 발행해서 SecurityContext 객체에 저장하는 역할을 한다.
-- 현재 사용자가 인증 사용자인지 익명 사용자인지 확인한다
SessionManagementFilter
인증을 처리하며 세 가지 작업을 동시에 처리하는 필터
-- 작동 조건 --
현재 세션에 SecurityContext가 없는 경우 or 세션이 느릴 경우
아래 세 가지 작업을 진행한다.
7-1. 세션 정보 등록
7-2. 세션 고정 보호
7-3. 세션 제한 처리.
1) 현재 사용자의 인증 시도 차단
2)이전 사용자의 세션 만료
ExceptionTranslationFilter
-- 인증이나 인가 예외가 터졌을 때 작동하는 필터 --
Try
chain,doFilter
catch
FilterSecurityInterceptor
-- 인가 처리를 하는 필터 --
두 가지 체크
1) SecurityContext 안에 인증 객체가 있는지 체크
(인증 객체가 없으면 즉시 인증 예외 발생 --> 인증이 없으면 권한 체크(인가)를 못하잖아)
2) 인증 객체가 있다면? (인증받은 사용자라면 인가처리를 한다)
2-1) AccessDecisionManager 가 인가처리를 한다
AccessDecisionManager는 AccessDecisionVoter 클래스를 가지고 최종적으로
사용자의 승인과 거부를 결정한다.
후속작업은 핸들러에서 처리.
(인증 페이지로 이동하든, 루트페이지로 가든)
------- 필터 작동 순서 --------