[개발 일기] 2025.04.10 - Spring Security Filter

2025. 4. 10. 13:16·개발 일기

💡 개요

 

Spring Security는 많은 필터를 지원해 준다.

 

 

오늘은 제공되는 필터를 정리해 보자.

 

 

 

📕 Spring Security Filter

 

 

 

Spring Security의 Filter는 위 이미지처럼 Chain 형태로 동작한다.

 

 

그렇기 때문에 인증・인가에 사용되는 필터의 모임을 Spring Security Filter라고 표현한다.

 

 

Spring Security Filter 동작 방식은 여러 필터가 존재하는 데, 첫 번째 필터가 통과되면 두 번째 필터로 넘어가고, 두 번째 필터가 통과되면 세 번째로 넘어가고 이런 식으로 동작한다.

 

클라이언트 요청
     ↓
[🔒 Spring Security Filter Chain]  ← 여기서 인증/인가 처리!
     ↓
[📦 DispatcherServlet]
     ↓
[🧭 HandlerMapping → Controller 등...]
     ↓
응답 반환

 

 

 

🛠️ Spring Security Filter 종류

 

Spring Security에서 제공되는 필터의 수는 매우 많다. (거의 10개 이상..?)

 

 

그렇기 때문에 오늘은 실제로 자주 사용되는 필터 몇 가지만 정리해 보자.

 

 

 

⚙️ SecurityContextPersistenceFilter

 

클라이언트의 요청이 올 때 Security Context를 복원하고 응답 시 저장한다.

 

 

즉 인증을 성공한 사용자의 정보를 저장하는 Security Context에 정보를 저장하고 조회할 때 사용되는 필터이다.

 

 

 

⚙️ UsernamePasswordAuthenticationFilter

 

UsernamePasswordAuthenticationFilter는 인증 과정에서 로그인 처리를 담당하는 핵심 필터이다.

 

 

이 필터는 기본적으로 /login 경로로 들어오는 POST 요청에서 아이디와 비밀번호를 검증할 때 사용된다.

 

 

Spring Security를 프로젝트에 적용하면, 기본 설정 하에 자동으로 제공되는 로그인 폼 화면도 이 필터를 통해 처리된다.

 

 

 

⚙️ BearerTokenAuthenticationFilter

 

요즘 인증에 많이 사용되는 JWT 토큰을 검증할 때 사용되는 필터이다.

 

 

동작 방식은 Authorization 헤더에서 Bearer <token> 형식의 JWT나 OAuth2 토큰을 처리해 준다.

 

 

 

⚙️ ExceptionTranslationFilter

 

필터의 중요한 특징 중 하나는, 요청이 DispatcherServlet에 도달하기 전에 실행된다는 점이다.

 

 

일반적으로 Spring 애플리케이션 내부에서 발생하는 비즈니스 예외는 @ControllerAdvice와 같은 전역 예외 처리 클래스를 통해 처리할 수 있다.

 

 

하지만 필터 단계에서 예외가 발생하면 DispatcherServlet까지 도달하지 못하므로, 이러한 전역 예외 처리 방식은 적용되지 않는다.

 

 

이러한 이유로, Spring Security는 필터 체인에서 발생하는 예외를 처리하기 위해 ExceptionTranslationFilter를 제공한다.

 

 

 

⚙️ FilterSecurityInterceptor

 

필터 체인의 가장 마지막에 위치한 인터셉터이다.

 

 

인가는 말 그대로 해당 요청을 동작시킬 수 있는 권한이 충분한 지이다.

 

 

그렇기 때문에 FilterSecurityInterceptor에선 컨트롤러나 핸들러에 접근이 가능한지 권한을 검사하는 로직을 수행한다.

'개발 일기' 카테고리의 다른 글

[개발 일기] 2025.04.12 - 프로세스 vs 스레드  (0) 2025.04.12
[개발 일기] 2025.04.11 - String vs StringBuffer vs StringBuilder  (1) 2025.04.11
[개발 일기] 2025.04.09 - 정형 데이터 vs 비정형 데이터  (1) 2025.04.09
[개발 일기] 2025.04.08 - 리퍼러 정책  (1) 2025.04.08
[개발 일기] 2025.04.07 - Offset  (0) 2025.04.07
'개발 일기' 카테고리의 다른 글
  • [개발 일기] 2025.04.12 - 프로세스 vs 스레드
  • [개발 일기] 2025.04.11 - String vs StringBuffer vs StringBuilder
  • [개발 일기] 2025.04.09 - 정형 데이터 vs 비정형 데이터
  • [개발 일기] 2025.04.08 - 리퍼러 정책
오도형석
오도형석
  • 오도형석
    형석이의 성장일기
    오도형석
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • MSA 모니터링 서비스
        • DB
      • 스파르타 코딩클럽
        • SQL
        • Spring
      • 백엔드
        • Internet
        • Java
        • DB
      • 캡스톤
        • Django
        • 자연어처리
      • Spring
        • JPA
        • MSA
      • ETC
        • ERROR
      • 개발 일기 N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 인기 글

  • 태그

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
오도형석
[개발 일기] 2025.04.10 - Spring Security Filter
상단으로

티스토리툴바