오늘의하루

[Spring] 필터와 인터셉터 본문

Spring

[Spring] 필터와 인터셉터

오늘의하루_master 2023. 8. 29. 01:36

필터 : Servlet

흐름 : HTTP 요청 > WAS > 필터 > 디스패처 서블릿 > 컨트롤러

인터셉터 : SpringMVC

흐름 : HTTP 요청 > WAS > 필터 > 디스패처 서블릿 > 스프링 인터셉터 > 컨트롤러


참고 : 필터와 인터셉터는 두가지 모두다 체인이 가능하다.

체인이란? 여러개를 사용할 수 있다는 것이다.

예시1) HTTP 요청 > WAS > 필터1 > 필터2 > 필터3 > 디스패처 서블릿 > 컨트롤러

예시2) HTTP 요청 > WAS > 필터 > 디스패처 서블릿 > 인터셉터1 > 인터셉터2 > 인터셉터3 > 컨트롤러


인터셉터 간단히 알아보기

참고 : 인터셉터는 싱글톤으로 관리되기 때문에 지역변수의 사용을 유의해야한다.

preHandle

핸들러 어댑터를 호출하기 전에 실행된다.

반환값은 Boolean이며 true일 경우 핸들러 어댑터를 호출하여 컨트롤러를 호출한다.

false일 경우 핸들러 어댑터를 호출하지 않고 나머지 인터셉터도 호출하지 않는다.

PostHandle

컨트롤러 호출 후에 호출된다. (좀 더 정확히는 핸들러 어댑터 호출 후 호출된다.)

만약 컨트롤러에서 예외가 발생했다면 PostHandle은 호출되지 않는다.

afterCompletion

뷰가 렌더링 된 이후에 호출된다.

afterCompletion은 컨트롤러에서 예외가 발생하더라도 항상 호출된다.

매개변수로 Exception ex를 받기 때문에 무슨 예외인지도 알 수 있다.


한줄 정리 : 특별히 필터를 꼭 사용해야 하는 상황이 아니라면 인터셉터를 사용하는 것이 편리하다.

Comments