• 티스토리 홈
  • 프로필사진
    루루개발자
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
루루개발자
  • 프로필사진
    루루개발자
    • 분류 전체보기 (212)
      • react & next.js (12)
      • Node.js & Javascript & Type.. (24)
        • d3.js (10)
      • 차트 만들기 (1)
      • 티스토리 스킨 개발 (7)
      • 내가 만든 패키지 (3)
      • 내가 만든 CSS (1)
      • CSS (7)
      • 도커 & 쿠버네티스 (3)
      • 개인 프로젝트 (7)
      • 리뷰 & 추천 (2)
      • 알고리즘 (1)
      • IT 기타 (18)
      • 잡동사니 (1)
      • Spring Boot (5)
      • 취미로 그리는 그림들 (120)
      • 개인적인 생각들 (0)
  • 반응형
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • 스프링부트 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일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바