인터셉터는 이름 그대로 "무언가를 가로챈다"라는 의미를 가진다.
인터셉터는 컨트롤러의 URI에 접근하는 과정에서 무언가를 제어할 필요가 있을 때 사용된다.
정확히는 컨트롤러에 접근하기 전과 후로 나뉜다.
스프링에서 인터셉터는 HandlerInterceptor 인터페이스를 implements 하여 구현할 수 있다.
해당 인터페이스는 preHandle, postHandle, afterCompletion 총 세 개의 추상 메서드를 포함하고 있고, preHandle과 postHandle 두 개의 메서드만 사용한다 (나는..)
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)의 끝을 알리는 로그가 콘솔에 출력되도록 처리
다음으로 애플리케이션 내에서 인터셉터가 작동할 수 있도록 빈(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( )는 인터셉터 호출에서 경로를 추가(허용)한다는 의미
어플리케이션 실행을 하면 인터셉터를 사용하는 것을 볼 수 있음.