ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Back End] Interceptor
    Web Development/부스트코스 - Back-End(Java) 2020. 5. 28. 01:02

    ✔️ 인터셉터(Interceptor)

     

    Interceptor는 Dispatcher servlet에서 Handler(Controller)로 요청을 보낼 때, Handler에서 Dispatcher servlet으로 응답을 보낼 때 동작한다.

    Filter는 클라이언트 요청이 들어올 때, 클라이언트에게 응답을 할 때 동작한다. 

    ◾ Spring MVC 동작 과정

    1. 클라이언트 요청이들어온다. Dispatcher servlet은 선처리할 것이 존재하면 처리한다. (Common Service)

    2. 그다음 Handler Mapping을 통해서 어떤 핸들러가 동작해야하는지 결정한다.

    3. Dispatcher servlet이 Handler를 수행할 때 Handler 인터셉터를 거친다.

    4. 이후 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를 만든다. 

    WebMvcContextConfiguration.java
    실행 로그

    2. "/" 에 대해 index 뷰를 보여준다. index 뷰는 "list" controller로 리다이렉트한다. 스프링이 내부적으로 만든 "/" 에 대한 controller가 동작할때 인터셉터가 작동하는 것을 볼 수 있다. 

     

    index.jsp
    인터셉터의 작동 (1)

    3. list controller가 동작할때도 인터셉터가 작동하는 것을 볼 수 있다. 

    인터셉터의 작동 (2)

    댓글

Designed by Tistory.