Spring Security - Filter Chain

진경천·2024년 12월 3일

Filter란?

서버와 클라이언트 사이의 요청과 응답을 처리할때마다 실행되는 자바 클래스로이다.
요청이 DispatchServlet에 도달하기 전에 한번, 응답이 DispatchServlet으로부터 클라이언트에 전달되기 전에 한번 실행된다.

Spring Security는 인증과 인가에 관련된 작업을 Filter의 흐름에 따라 처리한다.

DelegatingFilterProxy

Servlet 컨테이너는 필터 인스턴스를 등록하는 것이 가능하지만, 스프링에서 정의된 빈은 주입받지 못한다.

이러한 문제를 해결하기 위해 DelegatingFilterProxy가 Servlet 컨테이너의 생명주기와 ApplicationContext 사이에 다리를 놓아주는 역할을 한다.

DelegatingFilterProxy를 통해 Servlet 컨테이너에서 필터로서 동작하지만 실제로는 컨텍스트에 정의된 빈에게 필터 작업을 위임한다.

FilterChainProxy

클라이언트 요청 URI에 따라 필요한 필터 인스턴스와 서블릿을 포함하는 필터체인을 정의한다.

FilterChainProxy는 빈이기 때문에 DelegatingFilterProxy로 래핑되어서 사용된다.

SecurityFilterChain

현재 요청에 대해 어떤 보안필터 인스턴스를 호출할지를 결정하기 위해 FilterChainProxy를 사용한다.

Ref 스프링-스프링 시큐리티

MultipleSecurityFilterChain

FilterChainProxy는 요청된 URL 패턴에 따라 SecurityFilterChain을 호출할 수 있다.

예시로, 위 그림에서SecurityFilterChain.0에서 요청된 URL 패턴이 일치하면 호출하고 일치하는 인스턴스가 없다면 SecurityFilterChain.n 이 호출된다.

각 SecurityFilterChain은 고유할 수 있고 개별적으로 구성가능하다.

필터 종류와 역할

필터이름설명
SecurityContextPersistenceFilterHTTP 요청이 처리될 때 SecurityContexthttpSession에 저장하고 복원하는 역할. 인증 정보가 요청간에 유지되도록 함
LogoutFilter로그아웃 요청을 감지하고 처리
UsernamePasswordAuthenticationFilter사용자 이름과 비밀번호 기반의 인증 요청을 처리. 폼 로그인시 필터 활성화
DefaultLoginPageGenerationFilter사용자 정의 로그인 페이지가 없을 시, 기본 로그인 페이지 생성
BasicAuthenticationFilterHTTP 기본 인증 헤더를 검사하여, 인증을 수행. 요청 헤더에서 사용자 이름과 비밀번호를 추출하고, 인증 시도
RememberMeAuthenticationFilter"Remember Me" 인증 처리. 사용자가 사이트 재방문 시로 그인 유지에 사용
SecurityContextHolderAwareRequestFilter보안 관련 메소드를 Servlet API에 통합
AnonymousAuthenticationFilter사용자가 인증되지 않은 경우, 익명 사용자로 인식
Exception TranslationFilter보안 처리 중 발생하는 예외를 처리하고 적절한 예외에 따라 '인증/권한 부여 실패' 페이지로 리다이렉트
FilterSecurityInterceptor인증된 요청이 접근 제어 정책에 따라 허용되는지 확인. 접근 결정 관리자를 사용하여, 요청된 URL접근 허용 결정
profile
어중이떠중이

0개의 댓글