Spring Security 의존성을 추가하고 프로젝트를 실행하면 다음과 같이 여러 Filter들이 실행되는 것을 볼 수 있다.
Will secure any request with [
org.springframework.security.web.session.DisableEncodeUrlFilter@36776c32,
org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@7792d851,
org.springframework.security.web.context.SecurityContextHolderFilter@2291d9a0,
org.springframework.security.web.header.HeaderWriterFilter@5974b7e8,
org.springframework.web.filter.CorsFilter@5cd96b41,
org.springframework.security.web.csrf.CsrfFilter@5f7eee96,
org.springframework.security.web.authentication.logout.LogoutFilter@51efb731,
org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@4751e8b9,
org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter@32f32623,
org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter@7e1ffe70,
org.springframework.security.web.authentication.www.BasicAuthenticationFilter@4b515eab,
org.springframework.security.web.savedrequest.RequestCacheAwareFilter@39666e42,
org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@9b23822,
org.springframework.security.web.authentication.AnonymousAuthenticationFilter@73041b7d,
org.springframework.security.web.access.ExceptionTranslationFilter@183ade54,
org.springframework.security.web.access.intercept.AuthorizationFilter@5b000fe6
]
여러 Filter들 중 주요 필터는 다음과 같다.
- SpringContextHolderFilter : SecurityContext 객체를 생성, 저장, 조회하는 역할
- CsrfFilter: CSRF 공격을 막는 역할
- CSRF: 사용자가 특정 이미지, url 등을 클릭할 때 링크 또는 스크립트를 사용해 서버 측에 의도치 않은 HTTP 요청을 전송하게 하여 정보를 빼내거나 조작하는 공격(쿠키와 세션 기반으로 인증을 진행할 때 많이 일어날 수 있는 공격)
- REST API를 통해 Stateless하게 서버를 유지하고 JWT를 사용할 때는 해당 필터를 비활성화함
- LogoutFilter: /logout으로 요청이 들어오면 세션 무효화, 쿠키 삭제, SecurityContext를 비우는 역할
- UsernamePasswordAuthenticationFilter: /login으로 요청이 들어오면 username과 password를 비교하여 실제 인증을 수행하는 역할
- DefaultLoginPageGeneratingFilter, DefaultLogoutPageGeneratingFilter: 로그인, 로그아웃 페이지를 띄우는 역할
- SecurityContextHolderAwareRequestFilter: SecurityContext에 저장된 정보로 Request를 구성해 주는 역할
- AnonymousAuthenticationFilter: 익명 사용자에 대한 인증 처리 역할
- SecurityContext에 Authentication 객체가 없으면 Authentication의 구현체 중 하나인 AnonymousAuthenticationToken을 SecurityContext에 설정
- ExceptionTranslationFilter: AccessDenidException(인가 예외)와 AuthenticationException(인증 예외)을 처리하는 역할
- AuthorizationFilter: 권한을 확인하는 역할
'TIL(Today I Learned)' 카테고리의 다른 글
TIL - Spring Boot에서 Filter 내 발생하는 Exception 처리 (0) | 2024.06.14 |
---|---|
TIL - 비밀번호 수정 요청 시 기존 비밀번호를 사용하지 못하게 하기 (0) | 2024.06.13 |
TIL - Spring Security (1) | 2024.06.11 |
TIL - Kotest 테스트 코드 작성하기 (0) | 2024.06.10 |
TIL - 서버에서 보낸 쿠키가 브라우저에 저장되지 않는 문제 (0) | 2024.06.07 |