본문 바로가기

Server Development/Spring Basic

Spring - Interceptor

 

Interceptor

- DispatcherServlet과 Controller 사이에서 Client의 요청을 가로채서 특정 작업을 수행 후 Controller에게 전달하는 역할

- Spring Boot에서는 HandlerInterceptor로 구현

 

 

HandlerInterceptor를 추가한 Spring의 기본 동작 구조는 다음과 같다.

Client(Request) -> WAS(HttpServletRequest, HttpServletResponse 생성)-> Filter(Encoding등 처리) -> DispatcherServlet -> HandlerMapping(Controller Mapping) -> Dispatcher Servlet -> HandlerInterceptor -> Handler(Controller) -> Logic(Service, DAO) -> Handler(Controller) -> HandlerInterceptor -> DispatcherServlet -> ViewResolver -> View -> DispatcherServlet -> Filter -> WAS -> Client(Response)

 

-> " Controller 전/후에 동작한다. "

 

Filter vs Interceptor

- Filter는 DispatcherServlet 바깥에서 동작하므로 Component(각종 빈들)에 접근하기 어렵지만 Interceptor는 반대이다. 

 

HttpServletRequest : Header, Parmeter, Cookie, URL, URI 등, was가 생성

HttpServletResponse : Content-type, 응답코드, 메시지 등, was가 생성

 

 

 

구조

- preHandle : 컨트롤러로 요청이 가기전 작업

(return boolean -> false면 controller로 요청 가는거 막음)

- postHandle : 컨트롤러의 요청이 끝나고 작업

- afterCompletion : View가 렌더링된 후에 작업

 

 

사용

1. HandlerInterceptor interface를 상속받은 @Comonent 클래스 생성

-> 동작 처리

2. WebMvcConfigurer를 상속받은 @Configuration 클래스 설정

-> 처리를 배제할 or 수행할 Controller 설정

 

(+) default : 인터페이스의 메서드 앞에 붙여, 인터페이스를 상속받은 클래스들은 굳이 해당 메서드를 구현 안해도 되게 만들어 줌.

 

 

 

 

 

 

'Server Development > Spring Basic' 카테고리의 다른 글

Spring - @Transactional  (0) 2023.04.25
Spring - Spring Security  (0) 2023.04.23
Spring - Jasypt  (0) 2023.04.06
Spring - Multiple Requests, Threads  (0) 2023.04.05
Spring - AOP  (0) 2023.04.02