+/Spring

Spring Interceptor

writtenbyrla 2024. 5. 17. 13:19

 

✅ Request가 들어올 때 거치는 순서

  • Filter: 요청이 DispatcherServlet에 도달하기 전에 실행
  • Interceptor: DispatcherServlet이 실행된 후 컨트롤러(핸들러)가 실행되기 전/후에 실행
  • AOP: 메서드 호출 전/후에 적용

 

Filter와의 차이

  • Filter는 스프링 내부 기능과 관계없이 Web Container 단계에서 작동하므로 컨트롤러로부터 독립적
  • Interceptor는 Spring Container 단계에서 작동하므로 스프링과 연계되어 실행됨

 

Interceptor를 쓰는 이유

  • 공통 코드 사용으로 코드의 재사용성 증가
  • 메모리 낭비, 서버 부하 감소
  • 코드 누락에 대한 위험성 감소

 

      예를 들어,

      모든 요청에 대해 JWT 검증을 해야하는 경우

      Interceptor를 사용하지 않으면 각각의 메서드에 JWT 검증 코드를 작성해야 하지만

      Interceptor 사용 시 JWT 검증 코드를 한 번 작성하고 적용할 경로를 지정하여 반복적으로 원하는 기능을 추가한다.

      /admin/* 에 대한 모든 요청에 일괄적으로 Interceptor를 적용하여 코드량과 메모리 낭비를 줄이고 코드 누락의 위험성을 줄일 수 있다.

 

 

 


 

 

 

 

Interceptor 사용법

1. servlet-context.xml 설정 

 

 

2. CommonInterceptor.java

👉 Interceptor의 구현 메서드

PreHandle

  • 반환값이 True이면 핸들러의 다음 동작 실행, False면 중단되어 인터셉터와 컨트롤러가 실행되지 않음
  • 지정된 컨트롤러의 동작 이전에 가로채는 역할
  • HttpServletRequest, HttpServletResponse, Object handler(현재 실행되는 컨트롤러 파악, 추가적인 메소드 실행 작업)

 

PostHandle

  • 지정된 컨트롤러의 동작 이후 처리(DispatcherServlet이 화면을 처리하기 전에 동작)
  • ModelAndView 파라미터를 통해 화면단에 들어가는 Data의 조작이 가능

 

AfterCompletion

  • DispatcherServlet의 View가 정상적으로 Rendering된 상태에서 수행

 

AfterConcurrentHandlingStarted

  • 비동기 요청 시 postHandle과 afterCompletion이 수행되지 않고 afterConcurrentHAndlingStarted가 수행

 

 

 

 

 

 

 

 

 

 

 

 

[참고자료]

[Spring] Interceptor란? 구현 예제와 함께 (HandlerInterceptor, HandlerInterceptorAdapter) (velog.io)