본문으로 바로가기

[Study] Interceptor와 Servletfilter

category Frame Work/Spring Boot 2021. 12. 8. 18:29
728x90
반응형

Date: 2021년 12월 8일
Status: Completed
Task: Develop

Spring MVC Request LIFE CYCLE

Interceptor

  • 언제 사용하나?
    • 특정 EndPoint에 로그인 된 사용자가 접근 시
    • 특정 EndPoint에 접근 시 권한에 따라 접근 처리를 다르게 줄 때
    • 등등
  • 목적
    • 특정 URL 진입 시 어떤 작업을 수행해야 할 때
  • Tech
    • Servlet Filter, Interceptor, AOP 등등이 있음

Interceptor와 ServletFilter의 차이점

  • Servlet Filter
    • Dispatcher Servlet의 앞단에 들어오는 요청을 처리
    • J2EE의 표준 스펙의 정의됨
    • Dispatcher Servlet 전에 호출이 되므로 Spring 프레임워크오 무관한 것을 처리가능
  • Interceptor
    • Dispatcher Servlet 뒤의 Handler 영역에서 요청 처리
    • Spring 프레임워크에서 자체적으로 제공하는 기능임
      • Spring Bean을 사용할 수 있음
  • 사용예제
    • Servlet Filter를 사용하는 경우
      • 문자열 인코딩
    • Interceptor를 사용하는 경우
      • 클라이언트 요청과 관련 있는 처리

FLOW

  • Request → Servlet Filter → Dispatcher Servlet → Interceptor → Contorller

구현

  • HandlerInterceptorAdapter 를 상속받는 방법
    • Spring 5.3v 이상에서는 Deprecated 처리됨
  • HandlerInterceptor를 상속받는 방법
    • Spring Boot 2.3x to 2.5x 는 Spring 5.3v 이상이기 때문에 HandlerInterceptor를 상속받자
    • 아래 3가지 Method를 오버라이딩 해야함
      • preHandle: 컨트롤러 실행 전에 수행
      • postHandle: 컨트롤러 실행 후 결과를 뷰로 보내기 전에 수행
      • afterCompletion: 뷰의 작업까지 완료된 후 수행

Interceptor 등록하기

  • WebMvcConfigure의 구현체인 클래스에 다음과 같이 Interceptor 등록

      @Configuration
      public class ConnectionConfigure implements WebMvcConfigurer {
    
          @Autowired
          ConnectInterceptor connectInterceptor;
    
          @Override
          public void addInterceptors(InterceptorRegistry registry) {
              registry.addInterceptor(connectInterceptor);
          }
      }
728x90
반응형