스프링 부트 인터셉터

Yoon·2023년 2월 12일
0

1. 인터셉터(Interceptor)란?

인터셉터는 이름 그대로 "무언가를 가로챈다"라는 의미를 가진다.

인터셉터는 컨트롤러의 URI에 접근하는 과정에서 무언가를 제어할 필요가 있을 때 사용된다.
정확히는 컨트롤러에 접근하기 전과 후로 나뉜다.


2. HandlerInterceptor를 implements 하여 인터셉터 구현하기

스프링에서 인터셉터는 HandlerInterceptor 인터페이스를 implements 하여 구현할 수 있다.

해당 인터페이스는 preHandle, postHandle, afterCompletion 총 세 개의 추상 메서드를 포함하고 있고, preHandle과 postHandle 두 개의 메서드만 사용한다 (나는..)


3. 사용법

interceptor 패키지를 추가하고,
interceptor 패키지에는 LoggerInterceptor 클래스를 추가한 후
HandlerInterceptor 인터페이스를 implements 한다.


(위 이미지는 이미 만든걸 가져온 것이다. public class LoggerInterceptor implements HandlerInterceptor 제작하라는 의미임.)

STS에서 Alt + Shift + S 누른 뒤 V를 눌러서 Override/Implement Methods 기능으로 원하는 메세드를 선택하여 생성한다.

설명

@Slf4j

- 롬복(Lombok)에서 제공해주는 어노테이션으로, 로깅 추상화 라이브러리
- 로깅 추상화란, 로깅을 직접 하지 않고 로깅 구현체를 찾아 기능을 사용할 수 있게 해주는 것을 의미

 
preHandle( )
- 컨트롤러의 메서드에 매핑된 특정 URI가 호출됐을 때 실행되는 메서드로,
- 컨트롤러를 경유(접근)하기 직전에 실행되는 메서드

- 사용자가 어떠한 기능을 수행했는지를 파악하기 위하여
  해당 기능과 매핑된 URI 정보가 콘솔에 로그가 출력되도록 처리

 
postHandle( )
- 컨트롤러를 경유(접근) 한 후, 즉 화면(View)으로 결과를 전달하기 전에 실행되는 메서드
- preHandle( )과는 반대로 요청(Request)의 끝을 알리는 로그가 콘솔에 출력되도록 처리

3. LoggerInterceptor 클래스를 빈(Bean)으로 등록하기

다음으로 애플리케이션 내에서 인터셉터가 작동할 수 있도록 빈(Bean)으로 등록해 주어야 한다

com.board.configuration 패키지에 WebMvmConfiguration 클래스를 추가하고,
WebMvcConfigurer 인터페이스를 implements 한다.

.excludePathPatterns("/css/", "/images/", "/js/**");을 하면 css, images, js는 빼고 부름..

설명

WebMvcConfigurer 인터페이스

- 해당 인터페이스를 구현하면 @EnableWebMvc의 자동 설정을 베이스로 가져가며,
  개발자가 원하는 설정까지 추가할 수 있다는 장점이 있다. (Override 가능)

 

addInterceptors( )

- 애플리케이션 내에 인터셉터를 등록해주는 기능을 한다
- InterceptorRegistry의 addInterceptor( ) 메서드를 이용하여 인터셉터 클래스를 등록하는데, 
  excludePathPatterns( )는 "여기에 지정된 URI나 경로(Path)는 인터셉터 호출에서 제외하겠어!" 라고 이해하면 된다.
- 즉, 정적(static) 파일을 무시(ignore)하겠다는 의미


- 반대의 경우로 addPathPatterns( ) 메서드가 있다.
- excludePathPatterns( )가 인터셉터 호출에서 경로를 제외한다면,
- addPathPatterns( )는 인터셉터 호출에서 경로를 추가(허용)한다는 의미

결과 보기

어플리케이션 실행을 하면 인터셉터를 사용하는 것을 볼 수 있음.

profile
나의 공부 일기

0개의 댓글