- 스프링부트 Interceptor 실습2022년 01월 30일
- 루루개발자
- 작성자
- 2022.01.30.:58
반응형안녕하세요. 이번에는 스프링부트의 Interceptor 를 실제로 구현해보도록 하겠습니다.
지난번에 Filter 실습을 했었던 프로젝트에 이어서 진행해보겠습니다.
먼저 다음과 같이 3개 파일을 새로 생성해 줍니다.
interceptors/TestInterceptor1.java
package com.example.springbootsampleproject.interceptors; import org.slf4j.Logger; 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; public class TestInterceptor1 implements HandlerInterceptor { private final Logger logger = LoggerFactory.getLogger(this.getClass()); @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { this.logger.info("TestInterceptor1.preHandle"); return HandlerInterceptor.super.preHandle(request, response, handler); } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { this.logger.info("TestInterceptor1.postHandle"); HandlerInterceptor.super.postHandle(request, response, handler, modelAndView); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { this.logger.info("TestInterceptor1.afterCompletion"); HandlerInterceptor.super.afterCompletion(request, response, handler, ex); } }
interceptors/TestInterceptor2.java
package com.example.springbootsampleproject.interceptors; import org.slf4j.Logger; 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; public class TestInterceptor2 implements HandlerInterceptor { private final Logger logger = LoggerFactory.getLogger(this.getClass()); @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { this.logger.info("TestInterceptor2.preHandle"); return HandlerInterceptor.super.preHandle(request, response, handler); } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { this.logger.info("TestInterceptor2.postHandle"); HandlerInterceptor.super.postHandle(request, response, handler, modelAndView); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { this.logger.info("TestInterceptor2.afterCompletion"); HandlerInterceptor.super.afterCompletion(request, response, handler, ex); } }
위와 같이 Interceptor 2개를 만들어 줍니다.
그리고 해당 Interceptor 가 동작하려면 스프링부트가 실행할 때 등록을 해주어야 하는데,
그러기 위해선 WebMvcConfigurationSupport 클래스를 extend 한 Configuration 어노테이션을 달아줄
클래스를 하나 만들어주어야 합니다.
configurations/InterceptorConfiguration.java
package com.example.springbootsampleproject.configurations; import com.example.springbootsampleproject.interceptors.TestInterceptor1; import com.example.springbootsampleproject.interceptors.TestInterceptor2; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; @Configuration public class InterceptorConfiguration extends WebMvcConfigurationSupport { @Override protected void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new TestInterceptor1()) .addPathPatterns("/test/test2"); // 해당 interceptor가 특정 URL 에만 작동되게 할 수 있음 registry.addInterceptor(new TestInterceptor2()) .addPathPatterns("/*"); } }
그리고 특정 경로에 특정 Interceptor 가 동작함을 테스트하기 위해
아래와 같이 TestConttoller.java 의 내용을 수정합니다.
controllers/TestConttoller.java
package com.example.springbootsampleproject.contollers; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller @RequestMapping("/test") public class TestController { private final Logger logger = LoggerFactory.getLogger(this.getClass()); @GetMapping("") public @ResponseBody String index() { this.logger.info("TestController 진입!"); return "This is Test Page!"; } @GetMapping("/test2") public @ResponseBody String test2() { this.logger.info("TestController 진입!"); return "This is Test2 Page!"; } }
이제 스프링부트를 구동해보고 8080포트로 LISTEN 중인걸 확인 한 후, 다음과 같이 요청을 날려보겠습니다.
보시다시피 설정한 경로에 맞춰 해당 Interceptor 가 컨트롤러에 진입 전, 후 정상 작동하는 것을 볼 수 있었습니다.
반응형'Spring Boot' 카테고리의 다른 글
스프링부트 내에서 타임리프로 프론트 개발을 하면서 느낀 불편한 점 및 단점 (3) 2022.08.28 spring boot 에서 html, css, js 변경 시 실시간 반영 방법 (2) 2022.08.28 스프링부트 Filter 실습 (0) 2022.01.30 스프링부트 Filter, DispatcherServlet, Interceptor, Controller (0) 2022.01.30 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)