
- 서블릿 컨테이너에 요청이 들어온다. (사실 전부 서블릿 컨테이너 안에서 동작)
- DeligatingFilterProxy가 빈으로 등록되어 있으면 특정한 빈으로 요청의 필터 처리를 위임한다.
- 필터 체인은 WebSecurity, HttpSecurity를 가지고 필터 체인 목록을 만든다. 우리가 WebSecuriyConfiguration을 설정한 부분이다. 여기 까지가 표의 윗 부분이다.
- 이러한 필터들이 사용한 객체 들이 있는데 인증은 AuthenticationManager, 인가는 AccessDecisionManager
- 인증에 사용 되는 기본 구현체는 ProviderManager 이다.
- ProviderManager는 다시 여러 Provider를 사용해서 인증하는데 그 중에 하나가 DaoAuthenticationProvider 이다.
- DaoAuthenticationProvider는 데이터에서 유저 정보를 읽어 와서 비교한다. UserDetailsService를 이용해서 유저 정보를 가져온다.
- 인증이 성공한다면 SecurityContextHolder에 넣어 두고 전반에 사용한다.
- Authentication 객체는 Principal, GrantedAuthorities등을 가지고 있다.
- 인증이 되면 최종 적으로 FilterSecurityInterceptor를 이용해서 인가를 한다.
- FilterSecurityInterceptor는 AccessDecisionManager를 이용해서 인가한다. 적절한 role을 가지고 있는지
- 인가 전략은 3가지가 있는데 기본은 AffirmativeBaesd 이다. 한명 이라도 인가 되면 인가, 나머지 둘은 다수결, 만장일치이다.
- AffirmativeBaesd가 사용하는 Voter는 WebExpressionVoter 한가지 였었다. WebExpressionVoter는 SecurityExpressionHandler를 사용해서 expression을 처리하는데 이전 강의에서 계층형 인가를 위해 커스텀 했었다.