Spring Security는 Spring Application의 보안(인증, 인가)를 담당
- Spring Security 는 Filter를 기반으로 동작하기 때문에 Spring MVC와 분리되어 관리 및 동작
- Session-Cookie 방식으로 인증
- 서블릿 API 통합
- Spring Web MVC와의 선택적 통합
- 인증과 권한 부여를 모두 포뢀적이고 확장 가능한 지원
- 세션 고정, clickjacking, 사이트 간 요청 위조 등과 같은 공격으로부터 보호
- 서블릿 필터 체인을 자동으로 제공
- HTTP 요청 들어옴
- AuthenticationFilter가 HTTP request에서 사용자가 보낸 정보를 intercept
- 인증용 객체인 UsernamePasswordAuthentication Token을 만들어서 위임
- User의 ID가 Principle 역할, Password가 Credential 역할
- AuthenticationManager가 AuthenticationProvider에게 객체 전달
- UserDetailsService에 가서 Authentication을 가지고 User임을 확인하면, UserDetails을 꺼내서 session 생성
- SpringSecurity 저장소인 SecurityContextHolder에 저장하고, 요청 쿠키에 JSESSIONID가 유효하면 인증을 하게 됨
- Authentication에는 Pricipal, Credentials, Authorities가 저장되어있다.
- SecurityContextPersistenceFilter : SecurityContextRepository를 통해 SecurityContext를 Load/Save 처리
- LogoutFilter : 로그아웃 URL로의 요청을 감시하여 해당 사용자를 로그아웃 시킴
- UsernamePasswordAuthenticationFilter : ID/비밀번호 기반 Form 인증 요청 URL을 감시하여 사용자를 인증함
- ExceptionTransiationFilter : 요청을 처리하는 중에 발생하는 예외 위임하거나 전달
- FilterSecurityInterceptor: 접근 권한 확인을 위해 요청을 AccessDecisionManger로 위임. 이 필터가 실행된느 시점에는 사용자가 인증됐다고 판단
참고자료: https://catsbi.oopy.io/c0a4f395-24b2-44e5-8eeb-275d19e2a536, https://youtu.be/aEk-7RjBKwQ