[Spring] Interceptor 웹 요청처리시간을 측정

2022. 1. 25. 13:59 Spring Framework/Spring Core

Interceptor

브라우저 - DS - Interceptor - Control

​- dispatcher servelt과 controller 사이에 존재하여 요청을 가로챈다

- 모든 페이지마다 동일한 기능의 제어가 가능

 

인터셉터를 통해 할 수 있는 대표적 3가지

1 처리시간 체크 ( DB에 넣어 통계를 넣는다)

2 인증 체크

3 인가 체크를 할 수 있따.​

 

 

1. 웹 요청 처리 시간을 처리하는 Interceptor 만들기

​step1. MeasuringInterceptor.java

public class MeasuringInterceptor extends HandlerInterceptorAdapter{
    
    @Override
    public boolean preHandle(HttpServletRequest request,
            HttpServletResponse response, Object handler) throws Exception {
 
        //시간을 가져온다
        long currentTime = System.currentTimeMillis(); 
        //현재시간을 모델에 넣는다.
        request.setAttribute("bTime", currentTime);
        return true;
    }
    @Override
    public void afterCompletion(HttpServletRequest request,
            HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
 
        // View를 리턴하기 직전에 실행됨
        // 현재 시간을 구한다
        long currentTime = System.currentTimeMillis();
        
        // 요청이 시작된 시간을 가져온다
        long beginTime = (long )request.getAttribute("bTime");
        
        // 현재 시간 - 요청이 시작된 시간 = 총 처리시간을 구한다
        long processedTime = currentTime - beginTime;
        
        System.out.println("요청된 URL : " + request.getRequestURI());
        System.out.println("총 요청시간은 " + processedTime);
        
        super.afterCompletion(request, response, handler, ex);
        
    }
}

 

step2. dispatcherServlet.xml

    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/test2/**/" />
            <bean id="measuringInterceptor" class="com.ktds.taylor.intercept.
      MeasuringInterceptor" />
        </mvc:interceptor>
    </mvc:interceptors>

 

<mvc:mapping path="/test2/**/" />

해당 URL에서만 interceptor를 수행한다​ 

 

2. 로그인 체크하는 Interceptor 만들기 - 인증체크 

​step1. LoginInterceptor.java

public class LoginInterceptor extends HandlerInterceptorAdapter {
 
    @Override
    public boolean preHandle(HttpServletRequest request,
            HttpServletResponse response, Object handler) throws Exception {
    
        HttpSession session = request.getSession();
        if(session.getAttribute("_MEMBER_") == null){
            
            response.sendRedirect("http://localhost:8080/TestMVC/write");
            //return false;
        }
        return true;
        
    }

 

​step2. dispatcherServlet.xml

    <mvc:interceptors>
        ......
        <mvc:interceptor>
            <mvc:mapping path="/detail/**/"/>
            <mvc:mapping path="/list"/>
            <mvc:exclude-mapping path="/write"/>
            <mvc:exclude-mapping path="/doWrite"/>
            <bean id="loginInterceptor" class="com.ktds.taylor.intercept.LoginInterceptor">​</bean>
        </mvc:interceptor>
    </mvc:interceptors>

<mvc:exclude-mapping path="/write"/>

해당 URL을 제외하고 interceptor를 수행한다​  

 

3. 인가체크 

​step1. LoginInterceptor.java

public class LoginInterceptor extends HandlerInterceptorAdapter {
 
    @Override
    public boolean preHandle(HttpServletRequest request,
            HttpServletResponse response, Object handler) throws Exception {
 
        String referURL = request.getHeader("referer");
        System.out.println("refererURL");
        
        HttpSession session = request.getSession();
        if(session.getAttribute("_MEMBER_") == null){
            
            response.sendRedirect("http://localhost:8080/TestMVC/write");
            //return false;
        }
        return true;
        
    }
}