본문 바로가기

Spring/Spring MVC

(SERVLET) 핸들러 인터셉터(1)

HandlerInterceptor

핸들러매핑 (어떠한 요청을 처리하기위한 핸들러를 찾는 과정)에 핸들러인터셉터를 설정하면 핸들러매핑이 찾은 핸들러에 인터셉터를

적용한다.

  • 핸들러 맵핑에 설정할 수 있는 인터셉터

  • 핸들러를 실행하기 전, 후(아직 랜더링 전) 그리고 완료(랜더링까지 끝난 이후) 시점에 부가 작업을 하고 싶은 경우에 사용할 수 있다.

  • 여러 핸들러에서 반복적으로 사용하는 코드를 줄이고 싶을 때 사용할 수 있다.

    • 로깅, 인증 체크, Locale 변경 등...

boolean preHandle(request, response, handler)

  • 핸들러 실행하기 전에 호출 됨

  • “핸들러"에 대한 정보를 사용할 수 있기 때문에 서블릿 필터에 비해 보다 세밀한 로직을 구현할 수 있다.

  • 리턴값으로 계속 다음 인터셉터 또는 핸들러로 요청,응답을 전달할지(true) 응답 처리가 이곳에서 끝났는지(false) 알린다.

void postHandle(request, response, modelAndView)

  • 핸들러 실행이 끝나고 아직 뷰를 랜더링 하기 이전에 호출 됨

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

  • 이 메소드는 인터셉터 역순으로 호출된다.

  • 비동기적인 요청 처리 시에는 호출되지 않는다.

void afterCompletion(request, response, handler, ex)

  • 요청 처리가 완전히 끝난 뒤(뷰 랜더링 끝난 뒤)에 호출 됨

  • preHandler에서 true를 리턴한 경우에만 호출 됨

  • 이 메소드는 인터셉터 역순으로 호출된다.

  • 비동기적인 요청 처리 시에는 호출되지 않는다.

 

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/servlet/HandlerInterceptor.html

 

HandlerInterceptor (Spring Framework 5.2.3.RELEASE API)

Intercept the execution of a handler. Called after HandlerMapping determined an appropriate handler object, but before HandlerAdapter invokes the handler. DispatcherServlet processes a handler in an execution chain, consisting of any number of interceptors

docs.spring.io

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/servlet/AsyncHandlerInterceptor.html

 

AsyncHandlerInterceptor (Spring Framework 5.2.3.RELEASE API)

Extends HandlerInterceptor with a callback method invoked after the start of asynchronous request handling. When a handler starts an asynchronous request, the DispatcherServlet exits without invoking postHandle and afterCompletion as it normally does for a

docs.spring.io


서블릿 필터와의 차이

https://jwdeveloper.tistory.com/104?category=835408

 

(SERVLET) 서블릿 리스너와 서블릿 필터

서블릿 리스너 : 서블릿 컨테이너에서 발생하는 이벤트 (lifecycle의 변화, session의 변화, attribute의 변화...)에 특정한 코드를 실행해야 할 때 사용 언제 사용되는가? 서블릿 컨테이너 구동 시 데이터베이스..

jwdeveloper.tistory.com

  • 서블릿 보다 구체적인 처리가 가능하다. (스프링 MVC에 특화되어있다. 0)

boolean preHandle(request, response, handler)

void postHandle(request, response, modelAndView)

 

handler와 ModelAndView를 제공하는 것을 예로 들 수 있다.

  • 서블릿은 보다 일반적인 용도의 기능을 구현하는 데 사용하는 게 좋다.

https://github.com/naver/lucy-xss-filter

 

naver/lucy-xss-filter

Contribute to naver/lucy-xss-filter development by creating an account on GitHub.

github.com

 

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

(SERVLET) 리소스 핸들러  (0) 2020.02.10
(SERVLET) 핸들러 인터셉터(2)  (0) 2020.02.05
(SERVLET) 스프링 부트의 스프링 MVC 설정  (0) 2020.02.02
(SERVLET) WebMvcConfigurer  (0) 2020.02.02
(SERVLET) 스프링 MVC 빈 설정  (0) 2020.02.02