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 |