Spring HandlerInterceptor 사용법과 적용 예제
Spring MVC에서 인터셉터를 사용하면 컨트롤러 실행 전후 또는 전체 요청 처리 완료 후에 사용자 정의 로직을 삽입할 수 있습니다. 이 글에서는 HandlerInterceptor 인터페이스 구현 방법과 실전 적용 예제를 소개합니다.
1. HandlerInterceptor란?
HandlerInterceptor는 Spring Web MVC에서 요청 처리 과정의 특정 시점에 개입할 수 있는 인터페이스입니다.
주로 인증, 로깅, 성능 측정 등의 목적에 활용됩니다.
HandlerInterceptor는 아래 세 가지 메서드를 통해 요청 흐름을 제어합니다
- preHandle() – 컨트롤러 실행 전 호출, 요청 차단 가능
- postHandle() – 컨트롤러 실행 후, 뷰 렌더링 전 호출
- afterCompletion() – 뷰 렌더링 이후 호출, 리소스 정리 작업에 사용
2. HandlerInterceptor 구현 방법
2.1 인터셉터 클래스 작성
HandlerInterceptor 인터페이스를 구현하는 클래스를 생성합니다.
각 메서드에서 필요한 작업을 정의할 수 있습니다.
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Component
public class CustomInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 요청 처리 전 실행
return true; // true 반환 시 요청 계속 진행, false면 중단
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
// 컨트롤러 실행 후, 뷰 렌더링 전 실행
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception exception) throws Exception {
// 요청 완료 후 실행 (리소스 정리 등)
}
}
2.2 인터셉터 등록 (WebConfig)
Spring 설정 클래스(WebMvcConfigurer)를 통해 인터셉터를 등록하고 적용 경로를 지정합니다.
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Autowired
private CustomInterceptor customInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(customInterceptor)
.addPathPatterns("/**") // 모든 경로에 적용
.excludePathPatterns("/css/**", "/js/**", "/images/**", "/webjars/**"); // 정적 리소스 제외
}
}
3. 스프링 인터셉터 활용 예시
HandlerInterceptor는 다음과 같은 다양한 상황에 활용할 수 있습니다:
- 로그인 인증 – 로그인되지 않은 사용자의 접근을 제한하고 로그인 페이지로 리다이렉트
- 성능 분석 – 요청 시작 시점과 종료 시점을 기록해 처리 시간 측정
- 로깅 – 요청 URI, IP, 응답 코드 등을 기록하여 운영 상태 모니터링
'개발' 카테고리의 다른 글
[java] 자료형 변환의 종류 (0) | 2024.08.02 |
---|---|
Java Thread 클래스 사용법 (0) | 2024.08.01 |
[VSCode] region 코드접기 (0) | 2024.07.23 |
[C#] WPF Button 이미지 (0) | 2024.07.17 |
[Wireshark] 특정값으로 필터링 (0) | 2024.07.16 |