- 필터는 간단하게 말해 HTTP 요청과 응답을 변경할 수 있는 재사용 가능한 클래스 입니다.
- 필터의 기본 구조
- 요청의 내용을 변경하거나 응답의 내용으 변경 가능
- 1개 이상의 필터 연동 가능
필터 구현
필터를 구현하는 데 있어 핵심 3가지 타입입니다.
- javax.servlet.Filter 인터페이스 : 클라이언트와 최종 자원 사이에 위치하는 필터를 나타내는 객체가 구현 해야하는 인터페이스입니다.
- javax.servlet.ServletRequestWrapper 클래스 : 필터가 요청을 변경한 결과를 저장하는 래퍼입니다.
- javax.servlet.ServletResponseWrapper 클래스 : 필터가 응답을 변경하기 위해 사용하는 래퍼입니다.
- Filter 인터페이스 사용
- Filter 인터페이스의 메서드
- public void init(FilterConfig filterConfig) throws ServletException 필터를 초기화 할 때 호출됩니다.
- public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws java.io.IOException, ServletException 체인을 따라 다음에 존재하는 필터로 이동하바니다. 체인의 가장 마지막에는 클라이언트가 요청한 자원이 위치합니다.
- public void destory() 필터가 웹 컨테이너에서 삭제될 때 호출됩니다. - doFilter() 메서드에서 필터 기능 구현
public void doFilter(ServletRequest request, ServletResponse response
FilterChain chain)
throws IOException, ServletException{
// 1. request 파라미터를 이용하여 요청의 필터 작업 수행
...
// 2. 체인의 다음 필터 처리
chain.doFilter(request, response);
// 3. response를 이용하여 응답의 필터링 작업 수행
...
}
필터 수정
- web.xml에 URL 별 매핑 설정 추가
<web-app...>
<filter>
<filter-name>FilterName</filter-name>
<filter-class>javacan.filter.FileClass</filter-class>
<init-param>
<param-name>paramName</param-name>
<param-value>value</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>FilterNmae</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
...
</web-app>
필터 설정
- <dispatcher>를 통한 필터 적용 대상 지정
<filter-mapping>
<filter-name>AuthCheckFilter</filter-name>
<servlet-name>FileDownload</servlet-name>
<dispatcher>INCLUDE</dispatcher>
</filter-mapping>
<dispatcher>의 값
- REQUEST - 클라이언트의 요청인 경우에 필터를 사용(기본값)
- FORWARD - forward()를 통해서 제어를 이동하는 경우에 필터를 사용
- INCLUDE - include()를 통해서 포함하는 경우에 필터를 사용
요청 및 응답 래퍼
- 요청이나 응답을 변경할 때 사용
- 요청 래퍼 : HttpServletRequestWrapper
- 응답 래퍼 : HttpServletResponseWrapper - doFilter()에서 chain.doFilter()를 호출할 때, 래퍼 객체를 전달해 줌으로써 다음 작업 가능
- 요청 변경 : 파라미터 변경, 헤더 변경, 전송 데이터 변경 등
- 응답 변경 : 응답 데이터 변경, 압축 등
필터의 응용
- 데이터 변환(다운로드 파일의 압축/ 데이터 암호화/ 이미지 변환 등)
- XSL/T 를 이용한 XML 문서 변경
- 사용자 인증
- 캐싱 필터
- 자원 접근에 대한 로깅
'JSP' 카테고리의 다른 글
Servlet 라이프 싸이클(life cycle : 생명주기) (0) | 2022.07.22 |
---|---|
JSP 라이프 싸이클(life cycle : 생명주기) (0) | 2022.07.22 |
JSP MVC (0) | 2022.07.21 |
JSP 서블릿(어노테이션으로 매핑) (0) | 2022.07.20 |
JSP 서블릿 (0) | 2022.07.20 |