[Spring] Interceptor 웹 요청처리시간을 측정
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;
}
}
'Spring Framework > Spring Core' 카테고리의 다른 글
컨트롤러 클래스 없이 특정 view대한 컨트롤러 추가 addViewControllers (0) | 2022.05.24 |
---|---|
Spring - Filter, Interceptor, AOP (0) | 2022.01.25 |
[Spring 프로젝트] Interceptor로 request, response body json 값 로깅하기 (0) | 2022.01.24 |
[Spring] Filter, Interceptor, AOP 차이 및 정리 (0) | 2022.01.24 |
AspectJ Weaver를 사용한 애노테이션 기반의 스프링 AOP 구현 방법 (0) | 2021.04.22 |
AspectJ Weaver를 사용한 XML 기반의 스프링 AOP 구현 방법 (0) | 2021.04.22 |
[Spring] @Component 애노테이션 및 함께 사용하는 애노테이션 정리 (0) | 2021.04.22 |
[Spring] 애노테이션을 이용한 빈 설정 방법 정리 (0) | 2021.04.22 |