Filter, Interceptor

알비레오·2025년 9월 9일

자바

목록 보기
17/17

Filter

개념
잡사 서블릿(J2EE) 표준 기능으로, 서블릿 컨테이너(Tomcat 등) 레벨에서 작동하는 요청/응답 처리기

실행 위치
서블릿 컨테이넝서 DispatcherServlet 이전에 실행 -> 스프링 영역보다 앞단

주요 역할

  • 요청/응답 직접 조작 가능(요청값 변경, 응답 압축 등)
  • 전역적인 보안 검사(XSS 방어, 인증 전처리)
  • 요청 로깅, 인코딩 처리, 세션 관리 등

구현 메서드
doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 하나만 존재

설정 방법
web.xml 또는 스프링 @component와 FilterRegistrationBean으로 등록

특징

  • 스프링 컨테이너와 관계없이 실행됨
  • 여러 필터를 체인 형태로 연결 가능
  • 예외 발생 시 스프링 예외처리 미적용, 직접 처리 필요

예시 코드

@Component
public class MyFilter implements Filter {
  @Override
  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    System.out.println("Filter 작동 전");
    chain.doFilter(request, response); // 다음 필터 혹은 서블릿 실행
    System.out.println("Filter 작동 후");
  }
}

Interceptor

개념
스프링 MVC가 제공하는 요청 전후 처리 인터페이스

실행 위치
DispatcherServlet과 Controller 사이 -> 스프링 컨텍스트 내

주요 역할

  • 핸들러(컨트롤러) 호출 전후 작업(인증, 인가, 로깅 등)
  • 요청 파라미터 가공
  • 컨트롤러 진입 전 필요한 검사 및 조건체크

구현 메서드
preHandl(), postHandle(), afterCompletion() 등 여러 메서드 지원

설정 방법
WebMvcConfigurer의 addInterceptors 메서드에 등록

특징

  • 스프링 빈 컨테이너 관리, DI 가능
  • 요청/응답 직접 대체 불가(상태는 변경 가능)
  • 스프링의 예외처리와 잘 연동됨

예시 코드

@Component
public class MyInterceptor implements HandlerInterceptor {
  @Override
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    System.out.println("Interceptor preHandle");
    return true; // false 시 요청 중단
  }
  @Override
  public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    System.out.println("Interceptor postHandle");
  }
  @Override
  public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    System.out.println("Interceptor afterCompletion");
  }
}

차이점

0개의 댓글