728x90
반응형
인터셉터(Interceptor)란?
Controller에 들어오는 요청(HttpRequest)과 Controller가 응답(HttpResponse)을 가로채는 역할은 한다.
Filter와 역할이 유사한데 Filter와 Interceptor는 분명한 차이점이 있다.
1) 호출 시점
> Filter는 DispatcherServlet이 실행되기 전 , Interceptor는 DispatcherServlet이 실행된 후
2) 설정 위치
> Filter는 web.xml , Interceptor는 spring-servlet.xml
3) 구현 방식
> Filter는 web.xml에서 설정을 하면 구현 가능, Interceptor는 설정은 물론 메서드 구현도 필요
Interceptor를 구현하는 방법은 2가지가 있다.
1) HandlerInterceptor 인터페이스를 구현하는 방법
2) HandlerInterceptorAdapter 클래스를 상속 받는 방법
HandlerInterceptorAdapter에서 제공하는 메서드는 총 4가지 이다.
- PreHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
- 컨트롤러(즉 RequestMapping이 선언된 메서드 진입) 실행 직전에 동작.
- 반환 값이 true일 경우 정상적으로 진행이 되고, false일 경우 실행이 멈춤(컨트롤러에 진입을 하지 않음)
- 전달 인자 중 Object handler는 핸들러 매핑이 찾은 컨트롤러 클래스 객체
- PostHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
- 컨트롤러 진입 후 view가 랜더링 되기 전 수행
- 전달인자의 modelAndView을 통해 화면 단에 들어가는 데이터 등의 조작 가능
- afterComplete(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
- 컨트롤러 진입 후 view가 정상적으로 랜더링 된 후 제일 마지막에 실행이 되는 메서드
- afterConcurrentHandlingStarted(HttpServletRequest request, HttpServletResponse response, Object handler)
- Servlet 3.0부터 비동기 요청이 가능해짐에 따라 비동기 요청 시 PostHandle와 afterCompletion메서드를 수행하지 않고 이 메서드를 수행하게 됨 (Spring에서 제공함)
참고
728x90
반응형
'TIL > Spring' 카테고리의 다른 글
[TIL/Spring] 스프링 시큐리티와 OAuth 2.0으로 구글 로그인 기능 구현 (0) | 2022.10.30 |
---|---|
[TIL] 비즈니스 로직을 처리하는 곳은 Service가 아니다? (0) | 2022.10.09 |
[TIL] 의존관계 자동 주입과 조회 빈이 2개 이상일 때 문제 해결하기, 조회한 빈이 모두 필요할 때 사용하는 법 (0) | 2022.08.19 |
[TIL] 컴포넌트 스캔 (0) | 2022.08.19 |
[TIL] 싱글톤, 싱글톤 컨테이너, 싱글톤 방식의 주의점 (0) | 2022.08.16 |