아무거나

[SpringBoot] 간단한 Interceptor 구현 본문

Java/Spring

[SpringBoot] 간단한 Interceptor 구현

전봉근 2019. 1. 16. 23:05
반응형

Interceptor

  • Desc: Controller에 들어오는 요청 HttpRequest와 Controller가 응답하는 HttpResponse를 가로채는 역할을 한다. Interceptor은 주로 관리자만 접근할 수 있는 관리자 페이지에 접근하기 전에 인증을 하는 용도로 활용한다. 또한 Interceptor는 Servlet의 앞, 뒤에서 HttpRequest, HttpRequest를 가로채는 Filter와 역할이 유사한데 둘은 서로 다르다. 우선 Interceptor에 대해서만 알아보자

  • Interceptor Class 생성

      ...
      import javax.servlet.http.HttpServletRequest;
      import javax.servlet.http.HttpServletResponse;
      import org.springframework.stereotype.Component;
      import org.springframework.web.servlet.ModelAndView;
      import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
      
      @Component
      public class HttpInterceptor extends HandlerInterceptor {
    
          private static final Logger logger = Logger.getLogger(HttpInterceptor.class);
          
          // 맵핑되기 전 처리를 해주면 된다.
          @Override
          public boolean preHandle(HttpServletRequest request,
                                  HttpServletResponse response,
                                  Object handler) {
              logger.info("================ Before Method");
              return true;
          }
          
          // 맵핑되고난 후 처리를 해주면 된다.
          @Override
          public void postHandle( HttpServletRequest request,
                                  HttpServletResponse response,
                                  Object handler,
                                  ModelAndView modelAndView) {
              logger.info("================ Method Executed");
          }
          
          // 모든 작업이 완료된 후 실행된다.
          @Override
          public void afterCompletion(HttpServletRequest request,
                                      HttpServletResponse response, 
                                      Object handler, 
                                      Exception ex) {
              logger.info("================ Method Completed");
          }
      }
    
  • WebConfig 관련 파일에 Interceptor를 등록한 후 적용할 경로, 제외할 경로를 지정할 수 있다.

      @Configuration
      public class WebMvcConfig implements WebMvcConfigurer {
    
          @Autowired
          @Qualifier(value = "httpInterceptor")
          private HandlerInterceptor interceptor;
    
          @Override
          public void addInterceptors(InterceptorRegistry registry) {
              registry.addInterceptor(interceptor)
                      .addPathPatterns("/**")
                      .excludePathPatterns("/admin/**");
          }
      }
    
  • 결과 http://localhost:8080/admin

      ================ Before Method
      ================ Method Executed
      ================ Method Completed
    


반응형
Comments