본문 바로가기
프레임워크/Spring

Spring Interceptor

by 프로그래밍 공부 2023. 4. 21.

  스프링에서 Interceptor는 말 대로 가로채는 역할을 한다. 

Interceptor 요청(Requests)을 처리하는 과정에서 요청을 가로채서 원하는 동작을 추가하는 역할을 한다.

접근 제어(Auth), 로그(Log) 등 비즈니스 로직과 구분되는 반복적이고 부수적인 로직을 처리한다.

이러한 인터셉터를 활용하면 기존의 컨트롤러 로직을 고치지 않고도 제어가 가능하다. 

이를 구현하기 위해서는 스프링에서 제공하는 HandlerInterceptor 구현하거나

HandlerInterceptorAdapter를 상속할 수 있다.

스프링이 제공하는 HandlerInterceptor 인터페이스와 Adapter 추상 클래스에 정의되어 있는 메서드는

다음과 같다.

- preHandle()

Controller(핸들러) 실행 이전에 호출한다. 컨트롤러가 실행되기 전에 처리해야 할 작업이 있는 경우나

요청 정보를 가공하거나 추가할 때 사용한다. 

false를 반환하면 요청을 종료한다. 즉, Return값이 boolean이다. 

리턴이 true일 경우 preHandle()을 실행 후에 핸들러에 접근한다. 반대로 false 일 경우 작업을 중단하기 때문에 

컨트롤러와 남은 인터셉트가 실행되지 않는다.

- postHandle()

Controller(핸들러) 실행 후에 호출한다. 

정상 실행 후에 추가 기능을 구현할 때 사용된다. ModelAndView 타입의 정보를 인자로 받기 때문에

Controller에서 View 정보를 전달하기 위해 작업한 Model 객체의 정보를 참조하거나 조작할 수 있다.

Controller에서 예외 발생 시에 해당 메서드는 실행되지 않는다. 

- afterCompletion()

View가 클라이언트에게 응답을 전송한 뒤 실행한다. 즉, 모든 작업이 완료된 후에 실행된다.

Controller에서 예외가 발생할 시 네번째 파라미터로 전달이 된다. 기본적으로 null값이다.

따라서 Controller에서 발생한 예외 혹은 실행 시간 같은 것들을 기록하는 등의 후처리할 때 사용한다. 

 

라고 이해했다.