728x90

- Security 초기화
- 설정 파일을 기반으로 Filter를 생성하여 WebSecurity에 전달

- FilterChainProxy에 생성자로 Filter로 전달

각각의 Filter들의 빈으로 만들어 준다.
- Servlet Filter에서 요청이 들어오게 되면 DelegatingFilterProxy에서 요청이 들어오게 되면, springSecurityFilterChain으로 등록된 빈을 찾게 되는데 이게 FilterChainProxy로 등록이 되어 있으므로 FilterChainProxy에 요청을 위임한다.
- 인증 / 자원 접근 시도

- SecurityContextPersistenceFilter
- SecurityContext 객체를 세션에 저장하고, 조회하는 역할을 하는 필터
- 초기 SecurityContext 객체가 세션에 저장되어 있지 않으므로 세션에 저장하고, SecurityContext를 생성한다.
- 다음 접근부터는 SecurityContext객체가 세션에 저장되어 있으므로 세션에서 읽어와 createSecurityContext과정을 생략한다.
- LogoutFilter
- 로그아웃을 동작시키는 filter
- UsernamePasswordAuthenticationFilter
- form로그인 시 인증을 담당하는 필터
- 생성된 인증객체를 AuthenticationManager에게 위임하여 AuthenticationManager가 AuthenticationProvider에 인증 과정을 위임하고, 위임받은 AuthenticationProvider클래스가 인증처리를 한다.
- 이때 UserService를 호출하여 ID검사, PW일치 여부, 추가적 인증 동작을 진행한다.
- ConcurrentSessionFilter
- SessionManagermentFilter에 있는 Session expireNow()를 바라본다.
- 만약 이전 사용자 만료 정책을 사용할 경우 새로운 세션이 접근하게 되면 이전 첫 번째 사용자는 expireNow()가 true가 되고, 이전 사용자가 다시 어떤 자원에 접근을 하게 되면 해당 Filter에서 expire가 true가 됐음을 확인하고, 더 이상 진행하지 않고, logout후, 에러 메시지를 출력해 준다.
- RememberMeAuthenticationFilter
- RememberMe 기능을 사용했을 때 동작하는 filter로 세션이 만료되거나, 삭제되어도 RememberMe 쿠키를 활용하여 인증을 성공시키는 Filter이다.
- AnonymousAuthenticationFilter
- 익명 사용자용 Filter로 익명사용자로도 하여금 익명 Authentication객체를 만들고 인증을 하도록 동작시키는 filter이다.
- Null Object Pattern 을 활용하여 인증 객체가 null이 아닌 아무것도 하지 않는 객체를 생성한다
- SessionManagermentFilter
- 동시에 사용할수있는 세션 사용자를 제한하거나, 세션을 타임아웃을 감지, 세션 공격을 방어하는 세션 관리를 하는 filter이다.
- 동시 사용 세션을 제한하는 방법은 2가지가 존재한다.
- 이전 사용자 세션 만료
- 현재 사용자 인증 시도 차단
- ExceptionTranslationFilter
- 해당 필터는 try-catch문으로 에러를 잡으며, try문 안에 바로 다음 필터인 FilterSecurityInterceptor 필터를 호출한다.
- FilterSecurityInterceptor
- 인증 객체 존재 체크 -> 없으면 AuthenticationException 발생
- 권한 체크 -> AccessDecisionManager가 AccessDecisionVotor에게 권한 체크를 위임하며, 정책에 따라 권한 체크 오류를 판단
- 권한이 오류가 있으면 AccessDecisionException발생
728x90
