스프링 MVC 인터셉터(Interceptor)

Yuno·2024년 8월 10일

JavaSpring

목록 보기
7/16

✏️스프링 MVC 인터셉터(Interceptor)란?

인터셉터는 스프링 MVC의 HandlerInterceptor 인터페이스를 구현하여 요청 처리 과정에서의 특정 시점에 작업을 수행할 수 있는 컴포넌트.
인터셉터는 요청이 컨트롤러에 도달하기 전, 컨트롤러가 처리된 후, 뷰가 렌더링된 후에 작업을 수행할 수 있음.

인터셉터는 스프링 MVC의 핸들러 매핑, 핸들러 어댑터와 관련이 있으며, 스프링 MVC 컨텍스트에서 관리됨

📌 주요 메서드

preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)

👉 컨트롤러의 메서드가 호출되기 전에 실행. true 를 반환하면 요청을 계속 처리하고, false 를 반환하면 요청 처리를 중단.


postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)

👉 컨트롤러의 메서드가 호출된 후, 뷰가 렌더링되기 전에 실행됨.


afferCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)

👉 뷰가 렌더링 된 후, 요청 처리 후에 실행


예제

import org.springframework.web.servlet.HandlerInterceotor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LoggingInterceptor implements HandlerInterceptor {

	@Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    	System.out.println("Pre-handle: Request received at " + System.currentTimeMillis());
        return true; // 요청을 계속 처리하도록 허용
    }
    
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    	System.out.println("Post-handle: Request processed at " + System.currentTimeMillis());
    }
    
    @Override
    afferCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    	System.out.println("After completion: Request completed at " + System.currentTimeMillis());
    }
}

등록 방법

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 {
	
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
    	registry.addInterceptor(new LoggingInterceptor()).addPathPatterns("/**"); // 인터셉터를 적용할 URL 패턴 설정
    }
}

🤔 필터 와 인터셉터의 차이점

  1. 범위 및 적용 위치
    • 필터 : 서블릿 API 기반으로, 서블릿 컨테이너에서 관리됨.
      요청과 응답을 가로채고 수정할 수 있으며, 주로 웹 애플리케이션의 보안, 로깅, 인코딩 등과 관련된 작업을 처리
    • 인터셉터 : 스프링 MVC 기반으로, 컨트롤러와 뷰 처리 사이에서 작업을 수행.
      요청을 컨트롤러로 전달하기 전, 컨트롤러의 처리 후, 뷰 렌더링 후의 작업을 수행
  2. 등록 방법
    • 필터 : 서블릿 API를 사용하여 등록하며, FilterRegistrationBean 을 통해 스프링에서 등록할 수도 있음.
    • 인터셉터 : 스프링 MVC의 WebMvcConfigurer 를 구현한 설정 클래스에서 등록
  3. 관리 위치
    • 필터 : 서블릿 컨테이너의 필터 체인에서 관리
    • 인터셉터 : 스프링MVC의 핸들러 매핑과 관련이 있음
profile
Hello World

0개의 댓글