문제
요청을 처리하기 전후에 전송된 요청과 응답을 중간에서 가로채서(intercept) 조작을 해야하는 경우.
영향력
- 매번 요청마다 데이터 인코딩 스키마를 검사하거나, 요청에 대한 정보를 기록하거나,
전송하는 응답을 압축하는 것처럼. 요청사이에 중앙 집중해서 공통으로 처리하는 경우
- 코드를 조금씩 추가하고 삭제하기 쉽도록 하기 위해 본격적인 요청 핸들링 서비스와
전처리 및 후처리용 컴포넌트의 결합도를 느슨하게 구현하는 경우
- 재사용성을 높이기 위해 전처리와 후처리 컴포넌트를 각자 완전하고 서로 독립적으로 구현하려는 경우
해법
요청과 응답에 대해서 전처리와 후처리를 하기 위해 마치 플러그 접속식 필터처럼 쉽게 추가 삭제할수 있는 Intercepting Filter를 사용.
Filter Manager는 체인 형태로 느슨하게 결합된 필터들을 조합하여 적절한 필터에 제어를 위임.
구조
클래스 다이어그램
http://www.corej2eepatterns.com/Patterns2ndEd/images/IFMainClass.gif
시퀀스 다이어그램
http://www.corej2eepatterns.com/Patterns2ndEd/images/IFMainSeq.gif
전략
Standard Filter
서블릿 스펙버젼 2.3에서 기술하고 있는 deployment decriptor 이용(톰캣의 경우 web.xml)
Custom Filter
Base Filter
Template Filter
Custom SOAP Filter
JAX-RPC Filter