본문 바로가기

Spring/MVC

Handler Interceptor

핸들러 인터셉터란?

핸들러 맵핑(어떠한 요청을 처리해주는 핸들러를 찾는 것) 에 설정할 수 있는 것 

핸들러에다가 인터셉터를 추가해준다.

 

3개의 전 후 처리를 할 수 있다.

 

preHandle 에서는 

핸들러가 실행되기 전에 호출이 되는데  '어떤 핸들러'가 실행되는지에 대한 정보도 사용 할 수 있어서

서블릿 필터보다는 세밀한 로직이 구현 될 수 있다.

 

return 값으로는 계속 다음 인터셉터나 핸들러가 요청을 처리할 지 (true) , 아니면 응답이 여기서 끝날지를 결정한다.

 

PostHanlde 에서는

이때는 view가 렌더링 되기 전 상황이다.

그래서 modelAndView 를 커스텀 할 수 있다. 

view에 전달할 추가적이거나 여러 핸들러에 공통적인 모델 정보를 담는데 사용 할 수 있다.

 

 

afterCompletion 은?

요청 처리가 완전히 끝난 뒤 실행된다. 뷰 렌더링도 끝난 후에

preHandler 에서 true 를 return 한 경우만 호출 된다.

비동기 요청에서는 호출 되지 않는다.

 

 

 

-------- 호출 순서는? --------

 

preHandel 의 역순으로 실행이 된다.

afterCompletion 도 역순으로 실행 됨

 

order 로 순서를 정할 수 도 있다.

 

 

 

vs 서블릿 필터

그러면 서블릿 필터와의 차이는 뭘까

 

 서블릿 필터도 핸들러가 실행되기 전이나 후에 실행 할 수 있는데,

 

서블릿 필터의 구조

 

차이점이 있다면 서블릿 필터보다 훨씬 구체적이다.

예를들면 Handler 가 제공되기도 하고 , modelAndView 가 제공되기도 한다.

 

 

 

그럼 이제 인터셉터를 구현해보자

HanlderInterceptor 를 구현 후 override 를 해준다

 

그 후 인터셉터를 등록을 하면 되는데, 

 

 

WebMvcConfigurer 로 가서 인터셉터들을 등록을 해준다.

여기서 인터셉터가 시작되는 우선순위를 적용시킬 수 있다.

 

이렇게 order 를 주게 되면 숫자가 낮을 수록 우선순위가 높게 된다.

 

이렇게 패턴을 줘서 해당 url 에만 실행되도록 할 수 도 있다.

 

'Spring > MVC' 카테고리의 다른 글

Spring Boot 에서의 MVC 설정  (0) 2020.09.29
스프링 MVC 설정 - @EnableWebMvc  (0) 2020.09.29
WebMvcConfigurer - Formatter  (0) 2020.02.18
스프링 MVC 설정 - WebMvcConfigurer  (0) 2020.02.12
스프링 MVC 설정  (0) 2020.02.10