Web/Web

[Web] 서블릿 필터 (Servlet Filter)

728x90

 

 

 

서블릿 필터(Servlet Filter)란?

Client로부터 Server로 요청이 들어오기 전, 서블릿을 거쳐 필터링 하는 것

- 공통적인 요청 전처리와 응답 후처리에 사용

    • 인증, 로깅, 인코딩 등

    • 전처리 / 후처리 코드의 중복 제거에 유용하다

- 보통 하나의 필터를 사용하지만 여러 개의 필터를 사용할 수 있다

    • Filter1 전처리 → Filter2 전처리 → Servlet → Filter2 후처리 → Filter1 후처리

 

 

 

Filter 인터페이스

필터를 설정하는 FilterConfig, FilterChain, Filter 객체 필요

- FilterConfig, FilterChain 인터페이스를 상속받은 클래스들은 웹 컨테이너가 구현

- Filter에 필요한 건사용자 정의 필터 클래스는 javax.servlet.Filter 인터페이스를 구현

- Filter 인터페이스의 메서드

    • init(FilterConfig config) : 서블릿 컨테이너가 필터 인스턴스를 초기화하기 위해 호출하는 메서드

    • doFilter(ServletRequest res, ServletResponse res, FilterChain chain) : 필터에서 구현해야 할 로직을 작성하는 메서드

    • destroy() : 필터 인스턴스를 종료시키기 전 호출하는 메서드

 

 

 

Filter의 적용 : @WebFilter

- @WebFilter : 필터를 등록하는 어노테이션. 적용할 URL 패턴을 지정

...
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.annotation.WebFilter;

// 필터를 적용할 요청의 패턴 지정 - 모든 요청에 필터를 적용.
@WebFilter("/*")
public class PerformanceFilter implements Filter {
	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		// 초기화 작업
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		// 1. 전처리 작업
		long startTime = System.currentTimeMillis();

		// 2. 서블릿 또는 다음 필터를 호출
		chain.doFilter(request, response); 
		
		// 3. 후처리 작업
		System.out.print("["+((HttpServletRequest)request).getRequestURI()+"]");
		System.out.println(" 소요시간="+(System.currentTimeMillis()-startTime)+"ms");
	}

	@Override
	public void destroy() {
		// 정리 작업
	}

}

 

 

 

 

 

 

 

 

📌  References

- https://velog.io/@bottlepark/Servlet-07.-Filter

 

Servlet Filter

Servlet Filter란? Client로 부터 Server로 요청이 들어오기 전에 서블릿을 거쳐서 필터링 하는 것을 서블릿 필터라고 한다. 지금까지 Servlet은 였다면 Filter는 이다. Filter의 가 더 부모클래스이다. 즉, 공

velog.io

 

 

 

 

728x90