본문 바로가기
JSP

JSP 필터

by 요리하다그만둠 2022. 7. 21.
  • 필터는 간단하게 말해 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