728x90
Interceptor 정의
- 컨트롤러의 핸들러는 호출하기 전과 후의 요청과 응답을 참조하여 가공할 수 있게 중간에 가로채서 처리하는 기능
Interceptor 실행하는 시점
- Filter는 DispatcherServlet 앞단에 처리되며, Intercepter는 그 후인 Handler와 사이 구간에서 실행이 됨
- 왠만하면 Spring과 관련된 작업을 구현할 때는 Intercepter를 사용하는게 좋아보임
Interceptor 구성
public interface HandlerInterceptor {
boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler);
void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView mav);
void afterCompletion(HttpServletRequest request, HttpServeletResponse response, Object handler, Exception ex);
}
- Interceptor는 org.springframework.web.servlet.HandlerInterceptor 인터페이스를 구현함
- 메서드는 preHandle(), postHandle(), afterCompletion()로 구성
- preHandle() : 컨트롤러 호출되기 전에 실행, 보통 호출되기전에 요청정보를 추가할 경우 사용
- postHandle() : 핸드러가 실행 완료되었지만 View가 생성되기 이전에 실행
- afterCompletion() : 모든 View에서 최종결과를 생성 이후 모든 작업이 완료된 뒤에 실행
Interceptor 사용법
public class LoggerInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
logger.debug("===============================================");
logger.debug("==================== BEGIN ====================");
logger.debug("Request URI ===> " + request.getRequestURI());
return super.preHandle(request, response, handler);
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
logger.debug("==================== END ======================");
logger.debug("===============================================");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
}
}
- org.springframework.web.servlet.handler.HandlerInterceptorAdapter 클래스를 상속받아 Interceptor를 구현함
@Configuration
public class WebConfiguration implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoggerInterceptor())
.excludePathPatterns("/css/**", "/fonts/**", "/plugin/**", "/scripts/**");
}
}
- Java Config를 사용한다면, WebMvcConfigurer를 가지고 있는 addInterceptors메소드를 오버라딩하고 등록함
<interceptors>
<interceptor>
<mapping path="/**"/>
<beans:bean id="loggerInterceptor" class="tgyun615.com.interceptor.LoggerInterceptor"/>
</interceptor>
</interceptors>
- Java Config를 사용안하고 xml로 설정할 경우 <mvc:interceptors>요소에 Bean으로 Interceptor를 등록함
'SPRING' 카테고리의 다른 글
[SPRING] Transaction Propagation (0) | 2021.09.22 |
---|---|
[SPRING] AOP (0) | 2021.07.31 |
[SPRING] DISPATCHER-SERVLET (0) | 2021.06.07 |
[SPRING] Bean (0) | 2021.05.23 |
[SPRING] 컨테이너 (Container) (0) | 2021.05.23 |