모든 사용자에게 똑같이 사용될 기능에는 로그인, 질나쁜 요청을 처리해야하는 기능, 보안 등이 있을 것 이다.
톰켓 서버에 두가지 조작을 가할 수 있다.
Filter : 외부 클라이언트와 Dispatcher Servelet 사이에 놓인다. 중요한 것은 Filter는 스프링부트 외부에 있는 기능이라는 점이다.
Interceptor : 내부의 있는 기능이다.
둘 다 요청과 응답이 오고가는 와중에 각자의 기능을 적용할 수 있도록 구현된 인터페이스다. 따라서 난이도가 높지 않다.
Filter에서는 외부에서 구현하기 때문에 예외처리로 잡을 수 없다.
Filter 인터페이스에는 한 개의 한 개의 함수가 존재한다. HttpServletRequest, HttpServeletResponse를 기본 인터페이스로 사용하지 않기 때문에 조작이 가능하다. FilterChain 변수를 사용해 filter의 전후를 구분한다. filter는 스프링밖에서 스프링 애플리케이션에 도달하기 전에 모든 요청을 막을 수 있다.
preHandle() 과 postHandle() 사이에서 컨트롤러와 모델에 대한 조작이 일어나고 postHandle()과 afterCompletion() 사이에서는 응답의 전달이 이뤄진다.
preHandle() - 컨트롤러로 요청이 들어가기 전에 실행되는 함수
과 postHandle() - 컨트롤러에서 응답을 만들고 난 후 실행되는 함수
afterCompletion() - 응답을 클라이언트에게 보내고 난 후 실행되는 함수
TransactionLogFilter.java 클래스를 아래와 같이 작성한 후
실행시키고 post맨을 통해 아무거나 작동시켜보면 아래와 같이 로그가 찍히는 것을 확인할 수 있다.
다음으로는 Interceptor를 실습해보자. 아래와 같이 클래스를 작성한 후에 configuration에 등록을 해주면 사용이 가능하다.