Computer >> 컴퓨터 >  >> 프로그래밍 >> 프로그래밍

JSP 필터(Filter) 사용 방법 완벽 가이드: 클라이언트 IP 로깅 예제

JSP 필터는 요청과 응답이 서블릿이나 JSP에 도달하기 전후에 특정 작업을 수행할 수 있게 해주는 강력한 기능입니다. 다음 예제는 클라이언트가 어떤 JSP 파일에 접근할 때마다 해당 클라이언트의 IP 주소현재 날짜 및 시간을 출력하는 방법을 보여줍니다. 이 예제를 통해 JSP 필터의 기본 개념을 이해할 수 있으며, 동일한 원리를 응용하면 훨씬 더 정교한 필터 애플리케이션도 작성할 수 있습니다.

1. LogFilter 클래스 작성하기

// 필요한 자바 라이브러리 임포트
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;

// Filter 클래스 구현
public class LogFilter implements Filter {
    public void init(FilterConfig config) throws ServletException {
        // 초기화 파라미터 가져오기
        String testParam = config.getInitParameter("test-param");
        // 초기화 파라미터 출력
        System.out.println("Test Param: " + testParam);
    }
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
    throws java.io.IOException, ServletException {

        // 클라이언트 머신의 IP 주소 가져오기
        String ipAddress = request.getRemoteAddr();
        // IP 주소와 현재 타임스탬프 기록
        System.out.println("IP "+ ipAddress + ", Time "+ new Date().toString());
        // 요청을 필터 체인의 다음 단계로 전달
        chain.doFilter(request,response);
    }
    public void destroy( ) {
        /* 웹 컨테이너가 필터 인스턴스를
        서비스에서 제거하기 전에 호출됨 */
    }
}

코드 주요 포인트

  • init(): 필터가 초기화될 때 한 번 호출되며, web.xml에 설정된 초기화 파라미터를 읽어올 수 있습니다.
  • doFilter(): 실제 필터링 로직이 수행되는 핵심 메서드입니다. 여기서는 클라이언트 IP와 접속 시간을 로그로 남긴 후, chain.doFilter()를 호출하여 요청을 다음 필터 또는 대상 리소스로 전달합니다.
  • destroy(): 웹 컨테이너가 필터를 제거하기 전에 호출되며, 리소스 정리 작업에 사용됩니다.

2. 필터 컴파일 및 배치

LogFilter.java 파일을 일반적인 방식으로 컴파일한 후, 생성된 LogFilter.class 파일을 다음 경로에 복사합니다.

<Tomcat-설치-디렉토리>/webapps/ROOT/WEB-INF/classes

3. web.xml에서 필터 매핑 설정

필터는 정의된 후 URL이나 JSP 파일 이름에 매핑됩니다. 이는 web.xml 파일에서 서블릿을 정의하고 URL 패턴에 매핑하는 방식과 거의 동일합니다. 배포 서술자(deployment descriptor)인 web.xml 파일에 다음과 같이 필터 태그 항목을 추가합니다.

<filter>
    <filter-name>LogFilter</filter-name>
    <filter-class>LogFilter</filter-class>
    <init-param>
        <param-name>test-param</param-name>
        <param-value>Initialization Paramter</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>LogFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

매핑 설정 설명

위 설정에서 /* 패턴을 지정했기 때문에 이 필터는 모든 서블릿과 JSP에 적용됩니다. 만약 특정 서블릿이나 일부 JSP에만 필터를 적용하고 싶다면, url-pattern에 해당 경로를 구체적으로 지정하면 됩니다. 예를 들어 /admin/*처럼 특정 디렉터리나 /login.jsp처럼 개별 파일 경로를 지정할 수 있습니다.

4. 실행 결과 확인

설정이 완료되면 아무 서블릿이나 JSP를 호출해 보세요. 그러면 웹 서버 로그에 클라이언트 IP 주소와 접속 시간이 기록되는 것을 확인할 수 있습니다.

또한 콘솔 출력 대신 Log4J 로거를 활용하면 위 로그 내용을 별도의 파일로 저장하여 관리할 수 있어, 운영 환경에서 접속 기록을 체계적으로 추적하는 데 유용합니다.