preHandle()
true일 경우 preHandle() 실행 후 핸들러 접근postHandle()
false일 경우 실행되지 않는다.afterCompletion()
HandlerMapping 검색
Interceptor 체인 생성
요청 처리
preHandle(), postHandle(), afterCompletion() 메서드를 통해 요청과 응답을 처리한다.중앙 집중적인 공통 기능 관리
요청 처리 과정 제어
재사용성과 확장성
전역 예외 처리
성능 영향
컨트롤러와의 결합도
작업의 순서와 조건 제어
제한된 범위
인터셉터를 사용하여 모든 요청에 대해 사용자의 인증 여부를 검사할 수 있다. 예를 들어, 사용자가 보호된 페이지에 접근하려고 할 때, 인터셉터는 요청을 가로채어 사용자가 로그인되어 있는지 확인하고, 로그인되어 있지 않다면 로그인 페이지로 리다이렉트할 수 있다.
public class AuthenticationInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
HttpSession session = request.getSession(false);
if (session == null || session.getAttribute("user") == null) {
// 사용자가 로그인하지 않은 경우 처리 로직
response.sendRedirect("/login");
return false;
}
return true;
}
}
인터셉터를 사용하여 요청과 응답에 대한 로깅을 수행할 수 있다. 예를 들어, 특정 요청이 들어올 때 요청 정보를 로그에 남기거나, 응답을 생성할 때 응답 정보를 로그에 기록할 수 있다.
public class LoggingInterceptor extends HandlerInterceptorAdapter {
private static final Logger logger = LoggerFactory.getLogger(LoggingInterceptor.class);
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
logger.info("Request URL: {}", request.getRequestURI());
return true;
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
logger.info("Response Status: {}", response.getStatus());
}
}
인터셉터를 사용하여 트랜잭션을 관리할 수 있다. 예를 들어, 특정 요청이 들어왔을 때 트랜잭션을 시작하고, 요청 처리가 완료되면 트랜잭션을 커밋하거나 롤백할 수 있다.
public class LoggingInterceptor extends HandlerInterceptorAdapter {
private static final Logger logger = LoggerFactory.getLogger(LoggingInterceptor.class);
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
logger.info("Request URL: {}", request.getRequestURI());
return true;
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
logger.info("Response Status: {}", response.getStatus());
}
}