인터셉터란?
디스패처 서블릿과 컨트롤러 사이에 위치하여 컨트롤러로 가는 요청, 컨트롤러에서 오는 응답을 가로채어 특정 작업을 처리한다.
여기서 특정 작업이란 “url요청에 대한 log처리”, “권한체크” 와 같이 컨트롤러에서 중복하여 작성해야 하는 코드를 통해 처리되는 작업을 말한다.
preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
실행시점 : 디스패처 서블릿에서 컨트롤러로 요청이 전달되기 이전 실행
postHandle(HttpServletRequest arg0, HttpServletResponse response, Object handler, ModelAndView modelAndView)
실행시점 : 컨트롤러를 호출하여 요청을 처리한 이후 실행
- view를 생성하기전에 호출되어 model의 데이터를 참조하거나 조작가능
afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception exception)
실행시점 : View생성까지의 모든 작업을 처리한 이후 실행
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
public class ExampleIntercepter implements HandlerInterceptor{
public Logger logger = LoggerFactory.getLogger(ExampleIntercepter.class);
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception{
logger.info("인터셉터 preHandle함수 실행");
return true;
}
public void postHandle(HttpServletRequest arg0,
HttpServletResponse response,
Object handler,
ModelAndView modelAndView) throws Exception{
logger.info("인터셉터 postHandle함수 실행");
}
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response,
Object handler,
Exception exception) throws Exception{
logger.info("인터셉터 afterCompletion함수 실행");
}
}
<interceptors>
<beans:bean class="intercepter.ExampleIntercepter"/>
</interceptors>
