[스프링] Intercepter 설정하는 법에 대해서 ✍

2022. 12. 2. 21:02·개발중/Spring Boot
728x90
반응형

구글링으로 'Intercepter 가 무엇인가 ?' 라는 물음에 대해 

'공통관심사를 분리하여 API 가 호출될 때에 세 가지 시점에 맞춰 필요한 로직을 입맛대로 구현할 수 있는 기능이야' 까지는 대답을 할 수 있었다.

 

하지만 구현은 해본적이 없어 직접 설정을 해보았다.

: (

 

빈수 깃허브 >> https://github.com/soobinJung/Intercepter

 

GitHub - soobinJung/Intercepter: Intercepter Test

Intercepter Test. Contribute to soobinJung/Intercepter development by creating an account on GitHub.

github.com


실행되지 않는 인터셉트

 

공부한 곧이곧대로 코드를 적었으나 아무리 API 를 호출해도 

preHandle, postHandle, afterCompletion 아무것도 호출된 흔적이 없었다.

 

package com.example.binsoo.intercepter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

public class Intercepter implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println(">> preHandle");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println(">> postHandle");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object object, Exception ex) throws Exception {
        System.out.println(">> afterCompletion");
    }
}

 

설정에 대해 찾아보기 시작했다.

 

 xml 뿐만 아니라 다양한 설정에 대한 정보가 널려있었다.

WebMvcConfigurer 를 상속받고 addInterceptors 를 구현했다.

 

package com.example.binsoo.intercepter;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new Intercepter())
                .addPathPatterns("/api/*") // 해당 경로에 접근하기 전에 인터셉터가 가로챈다.
                .excludePathPatterns("/api/no"); // 해당 경로는 인터셉터가 가로채지 않는다.
    }
}

 

위의 코드에서 주의깊게 봐야 할 부분은 세 가지이다.

 

1️⃣ Intercepter 를 구현하고 적용시키지 않으면 무슨 소용일까 ?

InterceptorRegistry 에 addInterceptor 를 이용해 구현한 Intercepter 를 적용시켜주자.

 

2️⃣ Interceptor가 실행되어야 하는 API 경로 지정

addPathPatterns 로 Interceptor 가 실행되어야 하는 경로를 지정해주자.

 

3️⃣ Interceptor가 실행되어서는 안되는 API 경로 지정

excludePathPattern 를 이용해서 인터셉터가 가로채지 않아도 되는 경로를 지정해주자.

 


 

테스트 코드

 

아래의 두 가지 API 가 존재할 경우를 가정해보자.

  • /api/yes
    • /api 의 하위에 있기 때문에 Interceptor 가 동작한다.
  • /api/no
    • /api 의 하위에 있지만 제외 url 로 지정했기 때문에 동작하지 않는다.

 

package com.example.binsoo;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/api")
public class TestController {

    @GetMapping("/yes")
    public String yesBinsoo() {
        System.out.println("Intercepter Yes.");
        return "Intercepter Yes.";
    }

    @GetMapping("/no")
    public String noBinsoo() {
        System.out.println("Intercepter No.");
        return "Intercepter No.";
    }
}

 


728x90
반응형
저작자표시 (새창열림)

'개발중 > Spring Boot' 카테고리의 다른 글

[Spring] 단일책임원칙을 지키고 있나요  (0) 2022.12.16
intellij jdk 설정하는 방법 기록하기 ✍  (0) 2022.12.04
서블릿 필터와, 스프링 인터셉터 ( 면접단골질문 ) 🎹  (0) 2022.11.25
@NotNull, @NotEmpty, @NotBlank  (0) 2022.11.24
@RestController, ResponseEntity, @PathVariable  (0) 2022.11.19
'개발중/Spring Boot' 카테고리의 다른 글
  • [Spring] 단일책임원칙을 지키고 있나요
  • intellij jdk 설정하는 방법 기록하기 ✍
  • 서블릿 필터와, 스프링 인터셉터 ( 면접단골질문 ) 🎹
  • @NotNull, @NotEmpty, @NotBlank
Binsoo
Binsoo
내 트러블 슈팅
  • Binsoo
    정수빈 기술블로그임.
    Binsoo
  • 전체
    오늘
    어제
    • 빈수 개발자 개발 일기 (932)
      • 개발중 (634)
        • Spring Boot (95)
        • Spring Security (2)
        • Spring Batch (6)
        • Spring Boot & Redis (13)
        • Java Persistence API (JPA) (28)
        • Web (42)
        • Rest Api (7)
        • Spring Concurrency Control (3)
        • Redis (8)
        • Kubernetes (k8s) (4)
        • MYSQL (35)
        • AirFlow (15)
        • Docker (2)
        • Git (22)
        • Linux (9)
        • JSON Web Tokens (JWT) (4)
        • Troubleshooting (87)
        • Swagger (0)
        • Vue.js (52)
        • Java (74)
        • html (12)
        • C (5)
        • jQuery (15)
        • JavaServer Pages (JSP) (17)
        • Arduino (1)
        • JavaScript (35)
        • Amazon Web Services (AWS) (11)
        • Algorithm (9)
        • 참고 기능 (18)
        • mongo (2)
      • PROJECT (27)
        • 스프링부트+JPA+몽고 API 개발 (3)
        • MINI (2)
        • 게시판 (3)
        • vue 프로젝트 (1)
        • JPA 사이드 프로젝트 기록 (17)
      • TEAM STUDY (156)
        • 가상 면접 사례로 배우는 대규모 시스템 설계 기초 (8)
        • 한 권으로 읽는 컴퓨터 구조와 프로그래밍 (12)
        • NAVER DEVELOPER (4)
        • LINUX (23)
        • PYTHON (19)
        • SERVER (8)
        • 알고리즘 코딩 테스트 스터디 (31)
        • 쿠버네티스 (40)
        • 대세는 쿠버네티스 [초급~중급] (11)
      • BOOK (0)
      • 자격증 (61)
        • 리눅스 1급 - 필기 기록 (19)
        • 네트워크 관리사 (2)
        • 네트워크 관리사 2급 - 실기 기록 (21)
        • 네트워크 관리사 2급 - 필기 기록 (16)
        • 정보처리 (2)
      • 직장인 대학원 (17)
        • 기록 (1)
        • 캐글 스터디 (3)
        • R (12)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    리눅스 마스터 1급
    네트워크 관리사 요약
    git
    redis
    리눅스 마스터 1급 정리
    알고리즘
    java
    네트워크 관리사
    리눅스 마스터
    네트워크 관리사 2급
    docker
    REST API
    springboot
    쿠버네티스
    VUE
    Git 저장소
    쿠버네티스 스터디
    jpa
    BackendDevelopment
    네트워크 관리사 실기
    네트워크 관리사 학점
    리눅스 1급 요약
    리눅스 마스터 1급 요약
    리눅스 마스터 요약
    스프링
    Spring
    네트워크 관리사 2급 실기
    파이썬
    네트워크 관리사 자격증
    파이썬 알고리즘
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
Binsoo
[스프링] Intercepter 설정하는 법에 대해서 ✍

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.