개발/JAVA

[JAVA] 스프링 부트(Spring Boot) 그래들(Gradle) 프로젝트(Project) 인터셉터(Interceptor)적용하기

TaeDy.I.T. 2024. 4. 25. 09:39
반응형

안녕하세요. 오늘은 스프링 부트(Spring Boot) 그래들(Gradle) 프로젝트(Project) 인터셉터(Interceptor)적용하는 방법에 대해서 알아보겠습니다.

 

 

 

인터셉터(Interceptor)란?

인터셉터(Interceptor)는 웹 어플리케이션에서 요청(Request)과 응답(Response)의 흐름을 가로채고 조작하거나, 추가적인 처리를 할 수 있는 기능입니다.

 

인터셉터(Interceptor) 활용 및 용도

1. 전처리 및 후처리

2. 데이터 검증

3. 데이터 변환

4. 로깅 및 모니터링

5. 인증 및 인가

 

인터셉터(Interceptor) 적용하기

1. HandlerInterceptor 인터페이스를 구현하여 인터셉터(Interceptor) 클래스(Class)를 작성합니다.

인터셉터(Interceptor)
인터셉터(Interceptor)

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@Component
public class Interceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    	// 요청 전처리
        log.info("==================== preHandle ====================");
        log.info("Request URI ===> " + request.getRequestURI());
        return true; // true를 반환하면 요청을 계속 진행하고, false를 반환하면 요청을 차단합니다.
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    	// 응답 후처리 (응답을 조작하거나 추가 작업)
        log.info("==================== postHandle ======================");
    }
    
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    	// 요청/응답 처리가 완료된 후 작업
    	log.info("==================== afterCompletion ======================");
    }
}

HandlerInterceptor 인터페이스는 세가지의 메서드를 제공합니다.

- preHandle : 요청 전처리, true를 반환하면 요청을 계속 진행하고, false를 반환하면 요청을 차단합니다.

- postHandle : 응답 후처리 (응답을 조작하거나 추가 작업)

- afterCompletion : 요청/응답 처리가 완료된 후 작업

 

2, WebMvcConfigurer 인터페이스를 구현하여 인터셉터(Interceptor)를 등록해줍니다.

WebConfig
WebConfig

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;

import com.gtit.api.interceptor.Interceptor;

@Configuration
public class WebConfig implements WebMvcConfigurer {

	@Autowired
    Interceptor interceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(interceptor)
                .addPathPatterns("/**")
                .excludePathPatterns("/css")
                .excludePathPatterns("/testDatabaseConnection")
        	    .excludePathPatterns("/js");
    }
}

addInterceptors 메서드를 사용하여 인터셉터(Interceptor)를 등록합니다.

특정 경로를 제외하고 싶으면 excludePathPatterns에 추가하면 됩니다.

 

3. 테스트하여 로그를 확인합니다.

인터셉터(Interceptor) 로그(Log)
인터셉터(Interceptor) 로그(Log)

/ 를 호출하였을때는 인터셉터(Interceptor)에 찍어 놓은 로그(Log)가 찍힌걸 확인 할 수 있습니다.

excludePathPatterns에 /testDatabaseConnection 를 제외시켰기 때문에 /testDatabaseConnection 를 호출하면 인터셉터(Interceptor)를 타지 않는 것을 확인 할 수 있습니다.

반응형