Backend/SpringBoot 이론 부분

Filter 및 SecurityFilterChain

Dean83 2025. 12. 15. 15:00

요청이 오면, 이를 dispatcherServler 에 전달하기전에 중간에서 가로채어 공통적인 전, 후 처리를 수행한다. 

인증, 인가, 로깅, 데이터 압축등을 처리한다.  필터체인에는 여러개의 필터들이 존재하고, 이를 순차적으로 처리 하게 된다.

 

내장 서버에서 수행하게 되고, 만일 Spring Security가 있을 경우에는 Spring container에 있는 SecurityFilterChain을 DelegatingFilterProxy에서 호출하여 수행하고, 다음 Filter를 수행하게 된다. 모든 Filter가 수행된 후에는 DispatcherSurvlet으로 요청을 넘겨준다.

 

FilterChainProxy

SecurityFliterChain 의 목록을 관리하고, 적절한 SecurityFliterChain 선택하고 실행한다. 개발자가 Bean으로 등록한 SecurityFilterChain들을 관리하고 라우팅 한다.

 

SecurityFilterChain

실제 보안로직을 수행하는 보안 필터들의 묶음이다. 필요에 따라 url 마다 각각의 필터들을 구성할 수 있고, 이 내부에서 SecurityFliterChain 을 이용하여 설정된 순서(중요)대로 보안 필터를 동작 한다. 순서가 중요하다.

아래의 경우는 기본 FilterChain 중 일부 구성이다.

 

  • SecurityContextHolderFilter
    • SecurityContext 를 로드 하거나 클리어 함 (로그인된 사용자의 인증 상태를 불러오고, 삭제한다)
    • 즉, 로그인된 사용자 인지 아닌지를 확인한다.

  • LogoutFilter
    • 로그아웃 요청처리
    • SecurityContextHolder에 있는 인증정보 삭제 등

  • UsernamePasswordAuthenticationFilter
    • 폼로그인 방식 인증처리로, 기본적으로 /login url의 post 요청 감시
    • 실제 인증을 위임하여 처리한다. (AuthenticationManager 호출)

  • BasicAuthenticationFilter
    • HTTP Basic 인증헤더를 통한 인증

  • ExceptionTranslationFilter
    • 보안관련 예외처리를 함. 
      • 예 : AccessDeniedException, AuthenticationException

  • AuthorizationFilter
    • 보안필터 가장 맨 끝에 위치하여 권한이 충분하면 DispatcherServlet으로 전달하고, 그렇지 않으면 오류 리턴



커스텀 필터를 추가 할 수 있고, 순서가 중요하다. 

  • Authentication(인증)은 Authorization(인가) 앞에 이루어 져야 한다.
    • 당연히 권한을 주기전, 인증을 해야 한다.
  • SecurityContext (인증정보 저장하는 부분)은 인증보다 먼저 있어야 한다.
    • 인증을 확인 하기 위해서는 인증정보를 미리 불러와야 한다.
  • 예외처리는 Authorization 앞에 존재해야 한다.
  • addFilterBefore, addFilterAfter, addFilterAt 을 통해, 특정 필터 앞, 뒤 혹은 대체 할 수 있다.
    • 호출 예 addFilterBefore(커스텀필터,기본필터class)
      • 1번 인자값 : 커스텀필터
      • 2번 인자값 : 기본필터Class

 

커스텀 Filter

  • JWT나 API Key 인증 등 기본 Filter 에서 제공하지 않는 경우 커스텀으로 Filter를 생성해야함.
  • 특정 요청 차단(IP 대역폭 등) 혹은 로깅등에서도 사용.
  • doFilter 를 이용하여 처리 후 성공시 다음 Filter로 전달한다. 만일 오류가 발생하면 doFilter를 호출하지 않고 응답을 직접 처리한다. 
  • OncePerRequestFilter를 상속 받아서 구현한다.
    • FilterChain 이 동작하면서, 한번만 호출되어 실행하도록 해준다. 

  • 구현한 커스텀 Filter 를 SecurityFilterChain 설정에 추가 하도록 한다.

 

 

Url 별 필터 설정

  • securityMatcher(패턴) 코드를 통해 url 패턴을 지정 할 수 있다. 
  • url 별 SecurityFilterChain 을 각각 구성한다고 할 경우, Order 어노테이션을 통해 우선순위를 조절할 수 있다. 혹은 if 문을 통해서 url 별 어떤 SecurityFilterChain을 반영할 지 설정 할 수 있다.

 

 

'Backend > SpringBoot 이론 부분' 카테고리의 다른 글

Spring MVC 인증흐름과 주요 인터페이스들 (Form login기준)  (0) 2025.12.15
Spring boot의 요청 처리 흐름  (0) 2025.12.15
SpringBoot 에서 트랜잭션  (0) 2025.10.01
Entity 심화  (0) 2025.09.30
Proxy  (0) 2025.09.30