반응형
*22년 4월 한 달간 한국이러닝협회의 '실전 개발자를 위한 Spring Framework'를 수강하고 정리한 내용입니다
*모든 이미지의 출처는 한국이러닝협회의 '실전 개발자를 위한 Spring Framework'에 있습니다
1. Spring Interceptors의 특징
- 모든 요청에서 반드시 거쳐야 하는 Servlet Filter와 유사하지만, 인터셉터는 컨트롤러 요청에만 적용됨
- Been Container 로딩 후에 적용되므로, Bean 사용 가능
- 총 3부분에 대해 공통 기능을 넣을 수 있음
1) preHandle: 컨트롤러(핸들러) 실행 전
2) postHandle: 컨트롤러(핸들러) 실행 후, 아직 뷰를 실행하기 전
3) afterCompletion: 뷰를 실행한 이후
2. 사례: 웹 요청 처리시간 측정기
- preHandle과 afterCompletion을 이용
- 웹사이트에서 어떤 URK이 가장 많이 호출되고, 얼마나 많은 시간이 걸리는지 알 수 있는 방법
1) 인터셉터 생성
public class MeasuringInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
request.setAttribute("mi.beginTime", Syster.currentTimeMills());
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.currentTimeMills();
System.out.println(request.getRequestURI() + "실행시간:"
+ (endTime - beginTime));
}
}
2) 특정 URL 지정하기
- /test/로 시작하는 모든 URL, /event/로 시작하는 모든 URL에 MeasuringInterceptor 적용
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/text/**/"/>
<mvc:mapping path="/event/**/"/>
<bean id="measuringinterceptor"
class="kr.co.acomp.hello.interceptor.MeasuringInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
3) Servlet-context.xml 설정
<mvc:interceptors>
<bear id="measuringInterceptor"
class="kr.co.acomp.hello.interceptor.MeasuringInterceptor" />
</mvc:interceptors>
4) 실행 결과
3. 사례: 로그인 처리
- 요청 경로마다 별도의 접근제어가 필요하고, 접근 내용을 기록함
- preHandle를 이용한 로그인 체크기 제작
- 컨트롤러보다 로그인을 체크하는 중복 코드를 만들지 않고 로그인 체크
1) 인터셉터 생성
public class LoginCheckInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
boolean wasLogin = request.getSession().getAttribute("_MEMBER_") != null;
if(!wasLogin) {
response.sendRedirect("http://www.naver.com");
}
return wasLogin;
}
2) DispatcherServlet 설정
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/test/**/" />
<mvc:mapping path="/event/**/" />
<bean id = "measuringInterceptor"
class = "kr.co.acomp.hello.interceptor.MeasuringInterceptor" />
</mvc:interceptor>
<mvc:interceptor>
<mvc:mapping path="/**" />
<mvc:exclude-mapping path="/index" />
<mvc:exclude-mapping path="/regist" />
<mvc:exclude-mapping path="/login" />
<bean id="loginCheckInterceptor"
class="kr.co.acomp.hello.interceptor.LoginCheckInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
3) Interceptor가 선언된 순서대로 실행됨
- measuringInterceptor -> loginCheckIntercepter
반응형
'스프링(Spring)' 카테고리의 다른 글
예외처리 (0) | 2022.12.27 |
---|---|
스프링 트랜잭션과 로깅 (0) | 2022.12.05 |
PointCut 표현식과 Advisor 구현 (0) | 2022.11.20 |
Dynamic SQL (MyBatis 동적 SQL), AOP(Aspect Oriented Programming) (0) | 2022.11.02 |
MyBatis 소개, Mapper XML 파일 (0) | 2022.10.27 |