자원이 받게 되는 요청 정보는 클라이언트와 자원 사이에 존재하는 필터에 의해 변경된 요청 정보
또한, 클라이언트가 보게 되는 응답 정보는 클라이언트와 자원 사이에 존재하는 필터에 의해 변경된 응답 정보
doFilter(ServletRequest req, ServletResponse);
public class FilterClass implements Filter {
@Override
public void init(FilterConfig config) throws ServletException {
(Filter 호출 시 작업 설정)
}
@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
(Filtering 작업할 내용)
}
@Override
public void destroy() {
(삭제 시 작업 설정)
}
}
작성한 Filter class를 web.xml 파일에 작성해 주어야 한다.
1. Filter를 등록한다.
<filter>
<filter-name>Filter 설정명</filter-name>
<filter-class>Filter 구현 Classaud</filter-class>
<init-param> //필터에서 사용한 값 설정
<param-name>초기값 설정명</param-name>
<param-value>초기 설정값</param-value>
</init-param>
</filter>
2. url 패턴과 Filter를 mapping 한다.
<filter-mapping>
<filter-name>등록된 Filter명</filter-name>
<url-pattern>요청할 페이지 형식</url-pattern>
</filter-mapping>
3. Filter를 적용할 Servlet을 지저하여, Servlet과 Filter를 mapping 한다.
<filter-mapping>
<filter-name>등록된 Filter명</filter-name>
<servlet-name>적용할 Servlet명</servlet-name>
</filter-mapping>
Filter 클래스로부터 전달받은 데이터를 가공하여 다시 Filter에게 반환하는 클래스
데이터 가공이 필요한 시점이 "요청"일 경우 👉 HttpServletRequestWrapper클래스를 통해 구현
데이터 가공이 필요한 시점이 "응답"일 경우 👉 HttpServletResponseWrapper클래스를 통해 구현
관련 클래스(ServletRequest, ServletResponse, HttpServletRequest, HTtpServletResponse)를 내부에 보관하며 그 Interface를 구현한 객체를 참조하여 구현 method를 위임한다.
java Event 처리의 Adapter Class와 비슷한 기능을 한다고 볼 수 있다.
사용자가 별도의 request나 response 객체를 생성하여 활용할 때 Wrapper Class를 상속하여 활용하면, 편하게 원하는 Class만 재정의하여 사용 가능하다.
public SampleWrapper(HttpServletRequest wrapper) {
super(wrapper);
}
public SampleWrapper(HttpServletResponse wrapper) {
super(wrapper);
}