-
[Back End] InterceptorWeb Development/부스트코스 - Back-End(Java) 2020. 5. 28. 01:02
✔️ 인터셉터(Interceptor)
◾ Interceptor는 Dispatcher servlet에서 Handler(Controller)로 요청을 보낼 때, Handler에서 Dispatcher servlet으로 응답을 보낼 때 동작한다.
◾ Filter는 클라이언트 요청이 들어올 때, 클라이언트에게 응답을 할 때 동작한다.
◾ Spring MVC 동작 과정
-
클라이언트 요청이들어온다. Dispatcher servlet은 선처리할 것이 존재하면 처리한다. (Common Service)
-
그다음 Handler Mapping을 통해서 어떤 핸들러가 동작해야하는지 결정한다.
-
Dispatcher servlet이 Handler를 수행할 때 Handler 인터셉터를 거친다.
-
이후 View 리졸버를 통해 해당하는 View를 찾아 응답한다.
💾 LogInterceptor.java (인터셉터 클래스)
package kr.or.connect.guestbook.interceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; public class LogInterceptor extends HandlerInterceptorAdapter { // controller 메서드가 실행된후에 실행되는 메서드 @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println(handler.toString() + " 가 종료되었습니다. " + modelAndView.getViewName() + "을 view로 사용합니다."); } // controller 메서드가 실행되기 전에 실행되는 메서드 @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println(handler.toString() + " 를 호출했습니다."); return true; } }
💾 WebMvcContextConfiguration.java
◾ 인터셉터 등록을 위해 아래와 같은 코드를 추가한다.
// 인터셉터 등록 @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new LogInterceptor()); // LogInterceptor를 등록한다. }
👀 동작 확인해보기
1. 서버를 실행하면 스프링이 아래 코드에따라 특정 URL에 대한 Controller를 만든다.
2. "/" 에 대해 index 뷰를 보여준다. index 뷰는 "list" controller로 리다이렉트한다. 스프링이 내부적으로 만든 "/" 에 대한 controller가 동작할때 인터셉터가 작동하는 것을 볼 수 있다.
3. list controller가 동작할때도 인터셉터가 작동하는 것을 볼 수 있다.
'Web Development > 부스트코스 - Back-End(Java)' 카테고리의 다른 글
[Back End] Argument Resolver (0) 2020.05.28 [Back End] 상태유지기술 - Session (1) 2020.05.18 [Back End] 상태유지기술 - Cookie (0) 2020.05.11 [Back End] Layered Architecture and Rest Controller (0) 2020.04.06 [Back End] Spring MVC (0) 2020.04.03 -