인터셉터( Interceptor )
인터셉터는 중간에서 뭔가 가로채버린다는 뜻이다.
서블릿에서 필터랑 비슷한 것이다.
클라이언트가 서블릿(controller)에 요청을 할 때, 컨트롤러가 뷰에 뭔가를 전달하고 뷰에서 클라이언트에 응답할 때 발생한다.
(인터셉터는 DispatcherServlet이 컨트롤러를 호출하기 전, 후에 요청과 응답을 가로채서 가공하게 하는 것)
정확한 명칭은 핸들러 인터셉터( Handler Interceptor) 라고 함
인터셉터는 HandlerInterceptorAdapter를 상속받아 쓴다(extends)
이때 전처리기랑 후처리기가 있는데 전처리기가 요청할 때, 후처리기가 응답할 때 쓰는거다.
preHandle의 경우 컨트롤러가 호출되기 전에 실행, postHandle는 컨트롤러가 실행되고 난 후에 실행 함
---------------------
이놈은 web.xml 에서 써 준 설정 파일 *-servlet.xml 에 넣어준다.
(뷰리졸버등이 설정 되어 있는.. )
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/> // 모든 클래스를 감시한다는 뜻
<bean class="com.go.cooper.common.logger.CooperInterceptor"></bean> // 인터페이스가 구현된 클래스
</mvc:interceptor>
</mvc:interceptors>
-------------------
package com.go.cooper.common.logger;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
public class CooperInterceptor extends HandlerInterceptorAdapter{
protected Log logger = LogFactory.getLog(CooperInterceptor.class);
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if (logger.isDebugEnabled()) {
logger.debug("====================================== START ======================================");
logger.debug(" Request URI \t: " + request.getRequestURI());
}
System.out.println("dfd");
logger.info("pre");
return super.preHandle(request, response, handler);
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
if (logger.isDebugEnabled()) {
logger.debug("====================================== END ======================================\n");
}
logger.info("post");
System.out.println("dfd--");
}
}