[Java] 필터(Filter)

🚿 필터(Filter)란?

필터는 HTTP 요청과 응답을 변경할 수 있는 재사용 가능한 코드이다. 필터는 객체의 형태로 존재하며 클라이언트로부터 오는 요청(request)과 최종 자원(servlet 등) 사이에 위치하여 클라이언트의 요청 정보를 알맞게 변경할 수 있으며, 최종 자원과 응답(response) 사이에 위치하여 요청 결과를 알맞게 변경할 수 있다. 필터는 서블릿 컨테이너에서 생성, 실행, 종료된다.
정리하자면 클라이언트의 요청과 서버의 응답을 가공하거나 검사하는데 사용된다.

📐 필터의 기본 구조

filter chain

자원이 받게 되는 요청 정보는 클라이언트와 자원 사이에 존재하는 필터에 의해 변경된 요청정보가 되며, 클라이언트가 보게 되는 응답 정보는 클라이언트와 자원사이에 존재하는 필터에 의해 변경된 응답정보가 된다.

필터는 위의 그림과 같이 여러개의 필터가 모여서 하나의 체인(chain)을 형성할 수 있다.

🍥 필터 인터페이스

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class FirstFilter implements javax.servlet.Filter {

    public void init(FilterConfig filterConfig) throws ServletException {
      // 필터 초기화 작업
    }
    
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
      chain.doFilter(request, response); // 요청의 필터링 결과를 다음 필터에 전달    
    }
    
    public void destroy() {
      // 주로 필터가 사용한 자원을 반납
    }
}
  • init(): 필터를 웹 컨테이너에 생성한 후 초기화할 때 호출
  • doFilter(): 체인을 따라 다음에 존재하는 필터로 이동. 체인의 가장 마지막에는 클라이언트가 요청한 최종 자원이 위치
  • destroy(): 필터가 웹 컨테이너에서 삭제될 때 호출

서블릿 컨테이너는 사용자가 특정한 자원 요청 시 그 자원 사이에 필터가 존재하는 경우 그 필터 객체의 doFilter() 메소드를 호출하며, 바로 그 시점부터 필터가 작용하기 시작한다.


참고

Tags:

Categories:

Updated:

Leave a comment