Filter
→ 서블릿 컨테이너의 Filter는 Dispatch Survlet으로 가기 전에 먼저 적용
→ client가 http request를 보낼 때 먼저 filter를 거친다는 뜻을 내포하는 그림
→ client가 보낸 http request는 여러 개의 filter를 거쳐가게 됨
→ 이러한 filter들이 여러 개로 엮여서 chain의 형태를 띈다고 하여 위의 형태를 Filter chain 이라고 부름
→ 모든 Request들은 Filter chain을 거쳐야지 servlet에 도착함
→ Spring Security는 Filter chain 사이에 DelegationFilterProxy 라는 것을 끼워넣어서 보안 정책을 수행함
⇒ 경우에 따라 보안 정책을 달리해야하므로 filter의 적용을 다르게 해야할 수도 있기 때문에 filter chain 사이에 그룹을 하나 끼워넣어서 경우에 따라 다른 보안 정책을 적용하겠다는 것
💡 Filter 종류
- SecurityContextPersistenceFilter
- SecurityContextRepository에서 SecurityContext를 로드하고 저장
- LogoutFilter
- Request가 로그아웃하겠다고 하는 것인지 체크
- UsernamepasswordAuthenticationFilter
- username / password 로 로그인을 하려고 하는지 체크하여 승인이 되면 Authentication을 부여하고 이동 할 페이지로 이동
- HeaderWriterFilter
- Http 헤더를 검사하여 header를 추가하거나 빼주는 역할
- CorsFilter
- 허가된 사이트나 클라이언트의 요청인지 검사하는 역할
- CsrfFilter
- 리소스를 변경하는 요청의 경우 내가 내보낸 리소스에서 올라온 요청인지 확인
- ConcurrentSessionFilter
- 동시 접속을 허용할지 체크
- BearerTokenAuthenticationFilter
- Authorization 헤더에 Bearer 토큰이 오면 인증해주는 역할
- BasicAuthenticationFilter
- Authorization 헤더에 Basic 토큰을 인증해주는 역할
- RequestCacheAwareFilter
- request한 내용을 다음에 필요할 수 있어서 Cache에 담아주는 역할. 다음 Request가 오면 이전의 Cache값을 줄 수 있음
- SecurityContextHolderAwareRequestFilter
- 보안 관련 Servlet 3 스펙을 지원하기 위한 필터
- RememberMeAuthenticationFilter
- 아직 Authentication 인증이 안된 경우라면 RememberMe 쿠키를 검사해서 인증 처리
- AnonymousAuthenticationFilter
- 앞선 필터를 통해 인증이 아직도 안되었으면 해당 유저는 익명 사용자라고 Authentication을 정해주는 역할 (Authentication이 Null인 것을 방지)
- SessionManagementFilter
- 서버에서 지정한 세션 정책에 맞게 사용자가 사용하고 있는지 검사하는 역할
- ExcpetionTranslationFilter
- 해당 필터 이후에 인증이나 권한 예외가 발생하면 해당 필터가 처리
- FilterSecurityInterceptor
- 사용자가 요청한 request에 들어가고 결과를 리턴해도 되는 권한(Authorization)이 있는지를 체크
- 해당 필터에서 권한이 없다는 결과가 나온다면 위의 ExcpetionTranslationFilter필터에서 Exception을 처리
💡 Filter Chain 확인 방법
- SecurityConfig 클래스 위에 @EnableWebSecurity(debug=true) 어노테이션을 붙여주면 현재 실행되는 Security Filter들을 확인할 수 있음
'Web & Android > Spring Security' 카테고리의 다른 글
[Spring Security] 세션과 쿠키를 이용한 인증 (0) | 2023.10.17 |
---|---|
[Spring Security] Form Login 개념 & 사용법 (0) | 2023.10.17 |
[Spring Security] 기본 동작 구조 (0) | 2023.10.17 |
[Spring Security] Spring Security란? (0) | 2023.10.17 |
[Spring Security] Authentication의 메커니즘 (0) | 2023.10.17 |