스프링에서 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에서 발생한 예외 혹은 실행 시간 같은 것들을 기록하는 등의 후처리할 때 사용한다.
라고 이해했다.
'프레임워크 > Spring' 카테고리의 다른 글
Spring Web MVC(Model View Controller) (0) | 2023.04.20 |
---|---|
MVC(Model, View, Controller) (0) | 2023.04.20 |
Spring applicationContext class path resuource 에러 (0) | 2023.04.13 |
Spring AOP Proxy (0) | 2023.04.12 |
Spring AOP(Aspect Oriented Programming) (2) | 2023.04.12 |