Main Controller에서 HandlerMapper를 호출하기 전, Controller를 호출한 이후 응답, 최종적으로 응답을 참조하거나 변경할 수 있는 Filter객체.
개발자가 특정 작업을 수행하기 전 또는 이후에 작업을 가로채서 기능을 추가(ex, 로그인체크, 권한체크)하거나 변경할 때 사용.
org.springframework.web.servlet.HandlerIndercepter 인터페이스로 제공
1. HandlerInterceptor 구현
public class TestInterceptor implements HandlerInterceptor{
2. HandlerInterceptorAdaptor 상속
public class TestInterceptor extends HandlerInterceptorAdaptor{
}
}

preHandle()
-Main Controller가 HandlerMapper를 실행하기 전에 처리해야 할 작업이 있거나,
요청 정보를 전처리( 변경, 추가)해야 하는 경우에 사용.
-return
true- preHandle를 호출한 후 다음 작업으로 진행한다.
false - preHandle를 호출한 후 다음 작업 ( Controller, Interceptor의 남은 작업)을 수행하지 않는다.
-preHandle()은 여러 개의 Interceptor가 등록되어도 순차적으로 후출( post, after는 역순으로 호출)
postHandle()
-Controller호출 이후 호출.
-Controller에서 반환하는 ModelAndView를 받을 수 있다. ( M.A.V객체가 가진 값을 처리할 수 있다.)
-preHandle() method가 false를 반환하면 실행되지 않는다.
-비동기 요청일 때에는 처리되지 않는다.
-여러 개의 Interceptor가 등록되어있을 때에는 역순으로 호출된다.
afterCompletion()
-view를 생성한 후 응답되기전 호출
-요청시에 사용된 자원들의 해제할 때 ( 자원의 반납 ) 사용하면 적합.
-preHandle() method false를 반화하면 실행되지 않는다.
-비동기로 요청 될때에는 호출되지 않는다.
-적용중인 intercptor가 여러 개인 경우에는 역순으로 호출된다.
작성법
1.HandlerInterceptor를 구현.
public class 인터셉터명 implements HandlerInterceptor{
2. default method를 Override하고 코드 구현.
3. Intercepro를 적용할 URL을 설정. => servlet-context.xml에 설정
<interceptors>
<interceptor>
<mapping path=“”/> //적용할 URL: /** <=모든 URL
<exclude-mapping path=“”/> //제외될 URL
<exclude-mapping path=“”/>
<beans:bean id=“아이디” class=“Interceptor클래스”/>
</interceptor>
</interceptors>