Spring 인터셉터

CHM·2022년 6월 27일
0

Spring

목록 보기
26/26

Spring 인터셉터

  • 모든 요청에서 반드시 거쳐야하는 서블릿 필터와 유사
  • Servlet Filter와는 다름
  • 인터셉터는 컨트롤러 요청에만 적용됨
  • Bean Container 로딩 후 적용되므로 Bean 사용 가능

로그인에서 인터셉터 사용 예제

  1. 로그인 요청이 들어옴
  2. LogIntercepter에서 preHandle을 통과
  3. MainController수행(뒤에 Service, DAO 모두 수행됨)
  4. LogIntercepter에서 postHandle을 통해 Response
  5. 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));
    }

0개의 댓글