Filter
🧩 Filter
정의
Filter는 요청이DispatcherServlet에 도달하기 전후에 공통 처리를 수행하는 서블릿 컴포넌트이다. Spring MVC 내부 기능이 아니라 서블릿 컨테이너 레벨에서 동작한다.
인증, 로깅, 인코딩, 요청/응답 래핑처럼 여러 요청에 공통으로 적용되는 작업에 적합하다.
🧩 역할
- 요청 전처리를 수행한다
- 응답 후처리를 수행한다
- 모든 URL에 공통 로직을 적용할 수 있다
DispatcherServlet앞단에서 요청을 가로챈다
🛠 동작 흐름
- 클라이언트 요청이 들어온다.
Filter가 요청을 가로챈다.- 필요한 전처리를 수행한다.
chain.doFilter()로 다음 필터 또는 서블릿으로 넘긴다.- 응답이 돌아오면 후처리를 수행한다.
🛠 사용 예시
기본 구현
public class SampleFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println("request before");
chain.doFilter(request, response);
System.out.println("response after");
}
}
Spring Boot 등록
@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class LoggingFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
System.out.println("Request URI: " + req.getRequestURI());
chain.doFilter(request, response);
}
}
web.xml 기반 등록
<filter>
<filter-name>SampleFilter</filter-name>
<filter-class>com.example.SampleFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SampleFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
🧩 특징
- 서블릿 컨테이너에서 동작한다
- 요청과 응답을 모두 다룰 수 있다
- 필터 체인 구조로 이어진다
DispatcherServlet보다 앞단에서 동작한다
⚠️ 주의사항
chain.doFilter()를 호출하지 않으면 다음 단계로 진행되지 않는다.- 등록 순서에 따라 여러 필터의 실행 순서가 달라질 수 있다.
@Order또는FilterRegistrationBean으로 우선순위를 조정할 수 있다.- Spring MVC 내부 기능과는 역할이 다르므로
Interceptor와 구분해야 한다.
📌 정리
Filter는DispatcherServlet이전과 이후에 공통 처리를 수행하는 서블릿 컴포넌트다.- 요청/응답 전후 처리, 로깅, 인코딩, 인증 등에 자주 사용된다.
- Spring MVC의 내부 요소가 아니라 서블릿 컨테이너 레벨에서 동작한다.
댓글남기기