TIL(Today I Learned)

TIL - Spring Security Filter

Happy._. 2024. 6. 12. 22:53

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: 권한을 확인하는 역할