📢 Servlet Filter 란??
Servlet Filter는 클라이언트의 요청(Request)과 응답(Response)를 가로채서 중간에 특정 작업을 수행할 수 있는 Servlet Component이다.
클라이언트의 요청이 Servlet이나 JSP 에 도달하기 전에, 또는 응답이 클라이언트에 전달되기 전에 동작한다.
🎁 Servlet Filter의 주요 역할
1. 요청(Request) 전처리
사용자 인증 및 권한 체크
요청 파라미터 인코딩 처리
로그 기록 및 모니터링
2. 응답(Response) 후처리
응답데이터압축
보안헤더추가
캐싱정책적용
3. 공통작업처리
CORS 설정
XSS/SQL Injection 방어
💨 Filter 동작 순서
클라이언트 요청 -> 필터(Filter) -> 서블릿(Servlet) -> 필터(Filter) -> 클라이언트 응답
요청과 응답 사이에 필터를 거치게 할 수 있음!
🔰 Filter 구성 요소
1. init()
필터가 초기화될 때 호출 (서버 시작 시 1회)
2. doFilter()
요청/응답을 가로채서 처리 (핵심 메서드)
doFilter() 메서드는 파라미터에 filterchain을 가지고 있는데, filterchain.doFilter(request, response); 메서드를 호출하게 되면,
다음 필터가 있으면 필터를 호출하고, 필터가 없으면 dispatcherServlet을 호출한다.
만약 이 로직을 호출하지 않으면 다음 단계로 진행되지 않기 때문에, 특별한 경우를 제외하고 반드시 호출해야한다.
3. destroy()
필터가 소멸될 때 호출 (서버 종료시)
✨ Filter 구현 예제
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter("/*") // 모든 요청에 적용
@WebFilter(filterName = "LoginFilter", urlPatterns = {"/user/mypage","/shop/register"}) // 이런 양식으로 원하는 요청만 적용시킬수도 있음
public class LogFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) {
System.out.println("LogFilter 초기화됨");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println("요청이 들어왔습니다: " + request.getRemoteAddr());
// 다음 필터나 서블릿으로 요청 전달
chain.doFilter(request, response);
System.out.println("응답이 완료되었습니다.");
}
@Override
public void destroy() {
System.out.println("LogFilter가 종료됨");
}
}
✅ Filter의 장점
- 공통 기능 분리 → 중복 코드 최소화
- 유연한 요청/응답 처리 → 전처리·후처리 가능
- 보안 강화 → 인증·인가, XSS/SQL Injection 방어
❗ Filter 사용 시 주의사항
- chain.doFilter() 호출 → 호출하지 않으면 요청이 중단됨
- 필터 순서 주의 → 의도한 대로 작동하도록 등록 순서 관리
- 리소스 누수 방지 → destroy()에서 자원 정리
🏷️ 요약
- Servlet Filter는 요청/응답 전후로 공통 처리를 수행
- 인증, 인코딩, 보안, 로깅 등 다양한 전처리·후처리 작업 가능
- 여러 필터가 있을 경우 순서대로 실행 (FilterChain)
'Java' 카테고리의 다른 글
[JAVA] Kakao Pay Api 사용법 (0) | 2025.01.13 |
---|---|
[JAVA] Thread (0) | 2025.01.08 |
[JAVA] Java란 무엇인가 (3) | 2025.01.02 |