java

Spring HandlerInterceptor 사용법

개발에대해 2024. 7. 26. 13:50
반응형

 

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, 응답 코드 등을 기록하여 운영 상태 모니터링
반응형