-
[Spring Boot] Kotlin으로 REST API 만들기(8) - Interceptor 적용Spring Boot/Kotlin으로 REST API 만들기 2022. 11. 1. 23:08반응형
Kotlin으로 REST API 만들기(8) - Interceptor 적용
1. Interceptor 란?
인터셉터란 컨트롤러에 들어오는 요청 HttpRequest와 컨트롤러가 응답하는 HttpResponse를 가로채는 역할을 합니다.2. Interceptor 적용
2_1. Interceptor 구현
HandlerInterceptor 인터페이스를 상속 받아서 PreHandle, PostHandle, afterComplete 메소드를 구현하세요.
PreHandle(HttpServletRequest request, HttpServletResponse response, Object handler)- 컨트롤러(즉 RequestMapping이 선언된 메서드 진입) 실행 직전에 동작합니다.
- 반환 값이 true일 경우 정상적으로 진행이 되고, false일 경우 실행이 멈춥니다. (컨트롤러 진입을 하지 않습니다.)
- 전달인자 중 Object handler는 핸들러 매핑이 찾은 컨트롤러 클래스 객체입니다.
PostHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
- 컨트롤러 진입 후 view가 랜더링 되기 전 수행이 됩니다.
- 전달인자의 modelAndView을 통해 화면 단에 들어가는 데이터 등의 조작이 가능합니다.
afterComplete(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
- 컨트롤러 진입 후 view가 정상적으로 랜더링 된 후 제일 마지막에 실행이 되는 메서드입니다.
단축키 : Ctrl + O / 메소드 자동 완성(Override/Implement)
TodoInterceptor.kt
package com.example.springbootrestapi.web.interceptor import com.example.springbootrestapi.web.controller.TodoController import org.slf4j.LoggerFactory import org.springframework.web.servlet.HandlerInterceptor import org.springframework.web.servlet.ModelAndView import javax.servlet.http.HttpServletRequest import javax.servlet.http.HttpServletResponse class TodoInterceptor : HandlerInterceptor { private val log = LoggerFactory.getLogger(TodoController::class.java) override fun preHandle( request: HttpServletRequest, response: HttpServletResponse, handler: Any ): Boolean { val startTime = System.currentTimeMillis() log.debug( "Request URL::" + request.requestURL.toString() + ":: " + "Start Time=" + System.currentTimeMillis() ) request.setAttribute("startTime", startTime) return true } override fun postHandle( request: HttpServletRequest, response: HttpServletResponse, handler: Any, modelAndView: ModelAndView? ) { log.debug( "Request URL::" + request.requestURL.toString() + " Sent to Handler :: " + "Current Time=" + System.currentTimeMillis() ) } override fun afterCompletion( request: HttpServletRequest, response: HttpServletResponse, handler: Any, ex: Exception? ) { val startTime = request.getAttribute("startTime") as Long log.debug( "Request URL::" + request.requestURL.toString() + ":: " + "End Time=" + System.currentTimeMillis() ) log.debug( "Request URL::" + request.requestURL.toString() + ":: " + "Time Taken=" + (System.currentTimeMillis() - startTime) ) } }
2_2. Interceptor 빈 등록
WebMvcConfigurer 인터페이스를 상속 받아서 addInterceptors 메소드를 구현하세요.
- addInterceptor : 구현한 인터셉터를 추가
- addPathPatterns : 인터셉터를 적용할 URL 패턴를 설정
- excludePathPatterns : 인터셉터를 제외할 URL 패턴를 설정
WebMvcConfiguration.kt
package com.example.springbootrestapi.config import com.example.springbootrestapi.web.interceptor.TodoInterceptor import org.springframework.context.annotation.Configuration import org.springframework.web.servlet.config.annotation.InterceptorRegistry import org.springframework.web.servlet.config.annotation.WebMvcConfigurer @Configuration class WebMvcConfiguration : WebMvcConfigurer { override fun addInterceptors(interceptorRegistry: InterceptorRegistry) { interceptorRegistry.addInterceptor(TodoInterceptor()) .addPathPatterns("/api/*") } }
3. 결과 확인
/api/todos 호출 시 다음과 같이 로그가 출력되는지 확인하세요.
소스 코드는 Github Repository - https://github.com/tychejin1218/kotlin-springboot-rest-api.git (branch : section08) 를 참조하세요.
GitHub에서 프로젝트 복사하기(Get from Version Control) - https://tychejin.tistory.com/325
단축키 기본 및 응용 - https://tychejin.tistory.com/364반응형'Spring Boot > Kotlin으로 REST API 만들기' 카테고리의 다른 글