좋아! 네가 올려준 코드는 서블릿 필터(Filter)의 핵심 구조인 doFilter() 메서드야.
여기서 필터가 어떻게 요청(request)과 응답(response) 을 가로채고 처리하는지를 보여줘.
자세한 주석을 포함해서 아래에 완전한 템플릿 형태로 정리해줄게.
doFilter() 메서드 구조 설명 예시@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
// 1️⃣ 사전 처리 (요청 전)
System.out.println("[Filter] 요청이 들어오기 전에 처리할 로직");
// 🔄 다음 필터 또는 서블릿으로 요청을 전달 (이 줄이 없으면 요청이 끊김)
chain.doFilter(request, response);
// 2️⃣ 사후 처리 (응답 후)
System.out.println("[Filter] 응답을 클라이언트에 보내기 전에 처리할 로직");
}
@WebFilter("/*")
public class EncodingFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
// 요청과 응답 문자셋 설정
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
chain.doFilter(request, response); // 다음으로 넘김
}
}
@WebFilter("/*")
public class LoggingFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
long startTime = System.currentTimeMillis();
// 요청 전달
chain.doFilter(request, response);
long endTime = System.currentTimeMillis();
System.out.println("요청 처리 시간: " + (endTime - startTime) + "ms");
}
}
| 항목 | 설명 |
|---|---|
chain.doFilter() | 호출하지 않으면 요청이 다음 단계(다른 필터 또는 서블릿)로 전달되지 않음 |
| 사전/사후 처리 위치 | chain.doFilter() 이전 = 요청 전, 이후 = 응답 직전 |
필요하면 이걸 JWT 필터로 확장하거나
응답 본문 조작 (wrapper) 도 해줄 수 있어.
계속 도와줄까? 😊