Spring에서 공통 관심사를 해결할수있는 방법이 3가지 있다.
- Filter
- Interceptor
- AOP
HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 컨트롤러
HTTP 요청 -> WAS -> 필터1 -> 필터2 -> 필터3 -> 서블릿 -> 컨트롤러
필터 인터페이스를 구현하고 등록하면 서블릿 컨테이너가 필터를 싱글톤 객체로 생성하고, 관리한다.
init(): 필터 초기화 메서드, 서블릿 컨테이너가 생성될 때 호출된다.
doFilter(): 고객의 요청이 올 때 마다 해당 메서드가 호출된다. 필터의 로직을 구현하면 된다.
destroy(): 필터 종료 메서드, 서블릿 컨테이너가 종료될 때 호출된다.
chain.doFilter(request, response);
를 호출해서 다음 필터 또는 서블릿을 호출할 때 request
, response
를 다른 객체로 바꿀 수 있다.
ServletRequest
, ServletResponse
를 구현한 다른 객체를 만들어서 넘기면 해당 객체가 다음 필터 또는 서블릿에서 사용된다
https://whitelife.tistory.com/214
스프링 인터셉터는 스프링 MVC가 제공하는 기술이다.
서블릿 필터의 경우 단순하게 doFilter()
하나만 제공된다. 인터셉터는 단계적으로 잘 세분화 되어 있다.
서블릿 필터의 경우 단순히 request , response 만 제공했지만, 인터셉터는 어떤 컨트롤러 handler가 호출되는지 호출 정보도 받을 수 있다.
그리고 어떤 modelAndView 가 반환되는지 응답 정보도 받을 수 있다.
자동으로 세션에 있는 객체를 찾고, 만약 세션에 없다면 null 을 반환