반응형
서블릿 필터와 마찬가지로 웹과 관련된 공통 관심사항을 해결하는 기술이다.
필터는 서블릿이 제공하는 기술인 반면, 인터셉터는 스프링 MVC가 제공하는 기술.
둘다 웹관련 공통 관심사항을 처리하지만, 적용되는 순서와 범위, 사용방법이 다르다.
*스프링 인터셉터 흐름
HTTP요청 -> WAS -> 필터 -> (디스페처)서블릿 -> 스프링 인터셉터 -> 컨트롤러
*스프링 인터셉터 제한
HTTP요청 -> WAS -> 필터 -> (디스페처)서블릿 -> 스프링 인터셉터 -> 컨트롤러 // 로그인 사용자
HTTP요청 -> WAS -> 필터 -> (디스페처)서블릿 -> 스프링 인터셉터(적절치 않은 요청이라 판단, 컨트롤러 호출X) // 비 로그인 사용자
*스프링 인터셉터 체인
HTTP요청 -> WAS -> 필터 -> (디스페처)서블릿 -> 인터셉터1 -> 인터셉터2 -> 컨트롤러
: 필터와 마찬가지로 중간에 인터셉터 자유롭게 추가할 수 있다.
public interface HandlerInterceptor {
default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {}
default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {}
default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {}
}
preHandle: 컨트롤러 호출 전, 호출된다. 응답값이 true면 다음으로 진행하고, false면 진행하지 않는다.
postHandle: 컨트롤러 호출 후
afterCompletion: http 요청이 완전히 끝날때, 뷰가 랜더링 된 이후에 호출된다. / 예외가 발생해도 호출된다.
예외가 발생하면 postHandle은 호출되지 않으므로 예외와 무관하게 공통처리를 하려면 afterCompletion()을 사용해야한다.
'Study > SpringBoot' 카테고리의 다른 글
[SpringBoot] 문제해결: template might not exist or might not be accessible by any of the configured Template Resolvers (1) | 2021.11.18 |
---|---|
[SpringBoot]@Mapper (0) | 2021.10.10 |
[SpringBoot] 서블릿 예외 처리 (0) | 2021.09.04 |
[Spring Boot]서블릿 필터란? (0) | 2021.09.01 |
로그인처리 - 세션 방식 (0) | 2021.08.31 |