🔌 Filter Interface란?
- Java Servlet의 기본 스펙에서 제공하는 인터페이스로,
HTTP 요청과 응답을 가로채고 사전/후처리 로직을 수행할 수 있게 해 줌
📦 jakarta.servlet.Filter
| 특징 | 설명 |
|---|---|
| 🔗 Interface | Servlet Filter를 만들기 위해 반드시 구현해야 함 |
| 🛠️ 구현 후 등록 | Bean으로 등록하여 사용 (Spring에서 관리) |
| ♻️ Lifecycle | 서블릿 컨테이너가 싱글톤으로 생성 및 관리 |
⚙️ 주요 메서드
| 메서드 | 설명 |
|---|---|
init() | 필터 초기화 시 호출 (컨테이너 생성 시 1회) |
doFilter() | 🔥 핵심 로직 처리 메서드 모든 HTTP 요청마다 실행 |
destroy() | 필터 종료 시 호출 (컨테이너 종료 시 1회) |
→ init()과 destroy()는 default 메서드이기 때문에 꼭 구현하지 않아도 됨
🔁 doFilter() 메서드 핵심 이해
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
✅ request, response: 요청/응답 객체
⛓️ chain.doFilter(): 다음 필터로 넘김 or Servlet 호출
💡 필터 체인의 흐름을 여기서 직접 제어할 수 있음
🛠️ Servlet Filter 구현
🧪 요청 URL 로깅 필터
@Slf4j
public class CustomFilter implements Filter {
@Override
public void doFilter(
ServletRequest request,
ServletResponse response,
FilterChain chain
) throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
String requestURI = httpRequest.getRequestURI();
log.info("request URI={}", requestURI);
chain.doFilter(request, response); // 다음 필터 or Servlet 호출
}
}
💡 ServletRequest는 기능이 제한적이므로
→ HttpServletRequest로 다운캐스팅하여 사용함
🧾 Filter 등록 방법 (Spring Boot 방식)
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Bean
public FilterRegistrationBean customFilter() {
FilterRegistrationBean<Filter> filterRegistrationBean = new FilterRegistrationBean<>();
filterRegistrationBean.setFilter(new CustomFilter()); // 필터 등록
filterRegistrationBean.setOrder(1); // 실행 순서 (낮을수록 먼저)
filterRegistrationBean.addUrlPatterns("/*"); // URL 패턴 지정
return filterRegistrationBean;
}
}
🔧 주요 설정 옵션
| 메서드 | 설명 |
|---|---|
setFilter() | 적용할 Filter 객체 등록 |
setOrder() | 실행 우선순위 설정 (숫자가 작을수록 먼저 실행) |
addUrlPatterns() | 필터 적용 대상 URL 설정 (ex. /api/*, /*) |
💡 addUrlPatterns("/*") → 모든 요청에 필터 적용
⏱️
Filter의 동작 확인
🧪 Postman 요청 예시
GET /test 요청 시, Controller가 없어도request URI=/test📌 이유: Filter는 Controller보다 먼저 실행되기 때문
⛓️ FilterChain 구조 & 흐름

Filter는 체인 방식으로 연결doFilter()가 직접 다음 필터 호출DispatcherServlet → Controller 호출❗ Servlet Filter 정리
| 순서 | 설명 |
|---|---|
| 1️⃣ | Filter 인터페이스를 구현 |
| 2️⃣ | 구현한 필터를 Spring Bean으로 등록 |
| 3️⃣ | 요청 발생 시 → doFilter() 실행 |
| 4️⃣ | ServletRequest는 HttpServletRequest로 다운캐스팅하여 사용 |
| 5️⃣ | chain.doFilter() 호출해야 다음 필터 또는 Servlet으로 진행됨 |
| 6️⃣ | Spring Boot에선 FilterRegistrationBean으로 등록/순서/경로 설정 |
| 7️⃣ | URL 패턴은 Servlet URL 패턴과 동일, 필터를 모든 요청에 적용 가능 |
📝 마무리 팁
| 항목 | 내용 |
|---|---|
| 🔁 모든 요청에 적용 | addUrlPatterns("/*") |
| 🧠 순서 지정 | setOrder(1) 등으로 우선순위 조절 |
| ⛔ 주의 | chain.doFilter() 호출하지 않으면 흐름 멈춤 |
❗ @WebFilter 사용은 권장 X | Spring Boot 환경에선 순서 제어 어려움 |