- 스프링 인터셉터
- 인터셉터 활용 사례
- 인터셉터의 개념과 서블릿 필터와 차이점을 이해한다.
- 인터셉터를 활용한 사례를 통해 인터셉터를 구현한다.
모든 요청에서 반드시 거쳐야 하는 서블릿 필터와 유사하다
- Servlet Filter와는 다름
- 인터셉터는 컨트롤러 요청에만 적용됨
- Bean Contrainer 로딩 후에 적용되기 때문에 빈을 사용할 수 있음
모든 요청과 응답이 반드시 거쳐야 하는 구간이 인터셉터입니다. 서블릿 필터와의 공통점이기도 합니다. 차이점은 인터셉터는 빈을 사용할 수 있다는 것입니다.
- 요청 경로마다 별도의 접근제어
- 접근내용 기록
왼쪽 주황색 선이 DispatcherServlet이라고 보시면 됩니다.
그래서 모든 요청은 DispatcherServlet을 거치고 인터셉터를 거칩니다.
인터셉터는 총 3부분에 대해서 공통 기능을 넣을 수 있음
- preHandle : 컨트롤러(핸들러) 실행 전
- postHandle : 컨트롤러(핸들러) 실행 후, 아직 뷰를 실행하기 전
- afterConpletion : 뷰를 실행한 이후
웹 요청 처리 시간을 측정하는 Interceptor 만들기
- preHandle과 afterCompletion을 이용한 웹 요청 처리 시간 측정기
- 웹 사이트에서 어떤 URL이 가장 많이 호출되고, 얼마나 많은 시간이 걸리는지 알 수 있는 방법
public class 인터셉터명 extends HandlerInterceptorAdapter { @Override public boolean preHandle(...){ //내용 } @Override public void afterCompletion(...){ //내용 } }
Servlet-context.xml 설정
<mvc:interceptors> <bean id="measuringInterceptor" class="kr.co.acompp.hello.interceptor.MeasuringInterceptor" /> </mvc:interceptors>
특정 URL만 인터셉터 설정하기
<mvc:interceptors> <mvc:mapping path="/test/**/" /> <mvc:mapping path="/event/**/" /> <bean id="measuringInterceptors" class="kr.co.acompp.hello.interceptors.MeasuringInterceptors" /> </mvc:interceptors>
- /test/로 시작하는 모든 URL, /event/로 시작하는 모든 URL에 MeasuringInterceptors를 적용하고 그 외에는 적용하지 않는다
- preHandle를 이용한 로그인 체크기 제작
- 컨트롤러마다 로그인을 체크하는 중복 코드를 만들지 않고 로그인 체크하기
인터셉터가 여러 개 설정되어 있는 경우, 선언된 순서대로 실행된다.