[Spring] Filter, Interceptor

Gavin Ariel Lee·2021년 9월 15일
0

Filter

  • Dispatcher Servelt에 요청이 전달되기 전/후에 url 패턴에 맞는 모든 요청에 대해 부가작업을 처리할 수 있는 기능 제공
  • Spring Container가 아닌 Tomcat과 같은 web Container에 의해 관리
  • 필터의 URL-PATTERN /* 이라면 servlet, jsp뿐만 아니라 이미지와 같은 모든 자원의 요청에 호출
  • 스프링과 무관하게 전역적으로 처리해야하는 작업 처리

Filter 메서드

public interface Filter {
	public default void init(FilterConfig filterConfig) throws ServletException {}
    
	public void doFilter(ServletRequest request, ServletResponse response,
    		FilterChain chain) throws IOException, ServletException {}
            
	public default void destroy() {}
}
  • init
    필터 객체 초기화, 서비스에 추가하기 위한 메서드
    Web Container가 1회 호출하여 필터 객체를 초기화 이후 요청은 doFilter를 통해 전/후에 처리된다.

  • doFilter
    url pattern에 맞는 모든 HTTP 요청이 Dispatcher Servelt으로 전달되기 전/후에 web Container에 의해 실행되는 메서드

  • destroy
    필터 객체를 서비스에서 제거, 자원 반환
    Web Container에 의해 1회 호출

Interceptor

  • Spring이 제공하는 기술로써, Dispatcher Servlet이 Controller를 호출하기 전후에 요청과 응답을 참조하거나 가공할 수 있는 기능
  • 인터셉터는 Spring Container 내에서 동작하므로 필터를 거쳐 Dispatercher Servelt이 요청을 받은 이후에 동작
  • 클라이언트의 요청과 관련되어 전역적으로 처리해하는 작업 처리

Interceptor 메서드

public interface HandlerInterceptor {
	default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { 
		return true;
	}
    
	default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
		@Nullable ModelAndView modelAndView) throws Exception {}
    
	default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
		@Nullable Exception ex) throws Exception {}
}
  • preHandle
    Controller가 호출되기 전에 실행, Controller 이전에 처리해야하는 전처리 작업이나 요청 정보를 가공, 추가하는 경우 사용
    반환 타입 boolean - true이면 다음 단계로 진행, false면 작업 중단되고 이후 작업 진행X

  • postHandle
    Cotroller 호출 후에 실행, Controller 이후에 처리해야하는 후처리 작업이 있을 때 사용

  • afterHandle
    모든 뷰에서 최종 결과를 생성하는 일을 포함해 모든 작업이 완료된 후에 실행

Filter vs Interceptor

Filter
관리 컨테이너 : 웹 컨테이너
Request/Response 조작 : O
용도 :

  • 보안 관련 공통 작업
  • 모든 요청에 대한 로깅/검사
  • 이미지/데이터 압축 및 문자열 인코딩

Interceptor
관리 컨테이너 : 스프링 컨테이너
Request/Response 조작 : X
용도 :

  • 인증/인가 등과 같은 공통 작업
  • Controller로 넘겨주는 정보의 가공
  • API 호출에 대한 로깅/검사
profile
As you wish

0개의 댓글