* Interceptor 와 Filter 의 차이점
Spring MVC 요청 처리 흐름
1. 호출 시점이 다르다.
둘다 컨트롤러가 호출되기 전에 호출되어 실행된다. 하지만 Filter는 Dispatcher가 호출되기전에, Interceptor는 Dispatcher가 호출되고 난뒤 호출된다.
필터는 일반적으로 서블릿 컨테이너에서 제어하기 때문에 web.xml에서 정의하여야 하며, 스프링 애플리케이션에서 관리하는 빈을 DI로 받을 수 없다.
인터셉터는 dispatcher-servlet.xml 에서 컨트롤러에 대해 인터셉터를 정의하며, 스프링 애플리케이션에서 관리하는 빈을 DI로 받아서 사용한다.
2. 각 인터페이스에서 정의하고 있는 함수의 용도가 차이가 있다.
* Spring MVC 에서 interceptor
org.springframework.web.servlet.HandlerInterceptor ,
org.springframework.web.servlet.handler.HandlerInterceptorAdapter 를
상속받아 Interceptor를
구현한다,
HandlerInterceptor 를
상속할
경우
다음 3가지
메서드를
재정의한다.
preHandle() : Controller 가
수행되기
전에
호출된다.
처리결과에
따라
이후 Controller를
수행할지
여부를 boolean 으로 return 한다.
postHandle : Controller 가
수행된후 View 를
호출하기
전에
호출된다.
afterCompletion : View 작업까지
완료된
후
호출된다.
responseBody 를 이용할 경우 UI 에 이미 값을 전달후 해당 부분이 호출된다.
* Filter
- init() : 필터 인스턴스 초기화
- doFilter() : 전/후 처리
- destroy() : 필터 인스턴스 종료
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
// 전 처리
chain.doFilter(request, response);
// 후 처리
}
<참고> Filter에서 스프링DI를 사용하려면?
출처: http://credemol.blogspot.kr/2011/03/filter-spring-di.html
<filter-name>restfulAuthFilter</filter-name>
com.archnal.securityweb.web.RestfulAuthFilter
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
<filter-name>restfulAuthFilter</filter-name>
<url-pattern>/ws/rest/secure/*</url-pattern>
이런 경우 스프링컨텍스트의 DI를 이용해서 필터를 구현하고자 하는 경우에는 아래와 같이 web.xml 파일을 설정해야 한다.
<filter-name>restfulAuthFilter</filter-name>
org.springframework.web.filter.DelegatingFilterProxy
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
<filter-name>restfulAuthFilter</filter-name>
'IT노트 > eGov&Spring F/W' 카테고리의 다른 글
<context- param> (0) | 2015.01.30 |
---|---|
전자정부 프레임워크 3.0 :: 6 홈페이지 구조 및 흐름 이해하기 (0) | 2015.01.30 |
The Spring Tool Suite™ (STS) (0) | 2015.01.30 |
스프링의 스케쥴러 (0) | 2015.01.30 |
[Spring Framework] 3. HandlerMapping (0) | 2015.01.30 |