본문 바로가기
개발

Spring HandlerInterceptor 사용법

by 개발에대해 2024. 7. 26.

 

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