개념
잡사 서블릿(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 작동 후"); } }
개념
스프링 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"); } }