💡 개요
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 |