Spring 인터셉터
- 모든 요청에서 반드시 거쳐야하는 서블릿 필터와 유사
- Servlet Filter와는 다름
- 인터셉터는 컨트롤러 요청에만 적용됨
- Bean Container 로딩 후 적용되므로 Bean 사용 가능
로그인에서 인터셉터 사용 예제
- 로그인 요청이 들어옴
- LogIntercepter에서 preHandle을 통과
- MainController수행(뒤에 Service, DAO 모두 수행됨)
- LogIntercepter에서 postHandle을 통해 Response
- LogIntercepter에서 afterCompletion 수행
- preHandle : 컨트롤러(핸들러) 실행 전
- postHandle : 컨트롤러(핸들러) 실행 후, 아직 뷰를 실행하기 전
- afterCompletion : 뷰 실행 후
웹 요청 처리시간 측정 Interceptor 만들기
- preHandler와 afterCompletion을 이용한 웹 요청 처리 시간 측정기 제작
- 웹 사이트에서 어떤 URL이 가장 많이 호출되고, 시간이 걸리는지 알 수 있는 방법
- 직접 메서드를 만들지 않고, HandlerInterceptorAdapter를 상속받아 오버라이딩 해 작성한다.
- Servlet-context.xml 설정
<mvc:interceptors>
<bean id="measuringInterceptor" class="kr.co.acomp.hello.interceptor.MeasuringInterceptor" />
</mvc:interceptors>
- Intercepter 이용 클래스 MeasuringInterceptor
public class MeasuringInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest repuest, HttpServletResponse response, Object handler) throws Exception {
request.setAttribute("mi.beginTime", System.currentTimeMillis());
return true;
}
@Override
public void afterCompletion(HttpServletRequest request,HttpServletResponse response, Object handler, Exception ex) throws Exception {
long beginTime = (long) request.getAttribute("mi.beginTime");
long endTime = System.currentTimeMillis();
System.out.println(request.getRequestURI() + " 실행시간 : " + (endTime - beginTime));
}