안녕하세요. 오늘은 스프링 부트(Spring Boot) 그래들(Gradle) 프로젝트(Project) 인터셉터(Interceptor)적용하는 방법에 대해서 알아보겠습니다.
인터셉터(Interceptor)란?
인터셉터(Interceptor)는 웹 어플리케이션에서 요청(Request)과 응답(Response)의 흐름을 가로채고 조작하거나, 추가적인 처리를 할 수 있는 기능입니다.
인터셉터(Interceptor) 활용 및 용도
1. 전처리 및 후처리
2. 데이터 검증
3. 데이터 변환
4. 로깅 및 모니터링
5. 인증 및 인가
인터셉터(Interceptor) 적용하기
1. HandlerInterceptor 인터페이스를 구현하여 인터셉터(Interceptor) 클래스(Class)를 작성합니다.
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)를 등록해줍니다.
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)가 찍힌걸 확인 할 수 있습니다.
excludePathPatterns에 /testDatabaseConnection 를 제외시켰기 때문에 /testDatabaseConnection 를 호출하면 인터셉터(Interceptor)를 타지 않는 것을 확인 할 수 있습니다.
'개발 > JAVA' 카테고리의 다른 글
[JAVA] gradle 프로젝트 lombok @Slf4j log 설정 및 사용법 (4) | 2024.04.05 |
---|---|
[JAVA] Spring Boot Gradle 프로젝트 postgreSQL 설정 및 MyBatis 설정 (6) | 2024.04.02 |
[JAVA] SpringToolSuite4 Gradle 프로젝트에 lombok 추가 하기 (19) | 2024.03.25 |
[JAVA] Window에 Gradle 설치 및 환경 변수 설정하는 방법 (29) | 2024.03.22 |
[JAVA] WINDOW에 JAVA 설치 JDK 17 시스템 환경 변수 설정 (30) | 2024.03.19 |