서블릿 작성 필터
서블릿 필터는 다음 목적으로 서블릿 프로그래밍에 사용할 수 있는 Java 클래스입니다.
클라이언트 요청이 백엔드 리소스에 액세스하기 전에 차단합니다.
클라이언트로 다시 전송되기 전에 서버의 응답을 처리합니다.
사양에서 권장하는 다양한 유형의 필터:
인증 필터.
데이터 압축 필터.
암호화 필터.
리소스 액세스 이벤트 필터를 트리거합니다.
이미지 변환 필터.
로깅 및 감사 필터.
MIME 유형 체인 필터.
토큰화 필터.
XSL/T 필터(XSL/T 필터), XML 콘텐츠를 변환합니다.
필터는 배포 설명자 파일 web.xml에 배포된 다음 애플리케이션 배포 설명자의 서블릿 이름 또는 URL 패턴에 매핑됩니다.
웹 컨테이너는 웹 애플리케이션을 시작할 때 배포 설명자에 선언한 각 필터에 대한 인스턴스를 생성합니다. 필터는 배포 설명자에 선언된 순서대로 실행됩니다.
서블릿 필터 메소드
필터는 javax.servlet.Filter 인터페이스를 구현하는 Java 클래스입니다. javax.servlet.Filter 인터페이스는 세 가지 메소드를 정의합니다:
일련 번호 | 방법 및 설명 | ||||||||
---|---|---|---|---|---|---|---|---|---|
1 |
클라이언트가 체인 끝에서 리소스를 요청하여 요청/응답 쌍이 체인을 통해 전달될 때마다 컨테이너에 의해 메서드가 호출됩니다. | ||||||||
2 | <🎜>public void init(FilterConfig filterConfig)<🎜> 이 메소드는 웹 컨테이너에 의해 호출되어 필터가 서비스에 투입되었습니다. | ||||||||
3 | <🎜>public void destroy()<🎜> 이 메서드는 웹 컨테이너에서 호출되어 필터가 테이크 아웃됩니다. |
서블릿 필터 예시
다음은 클라이언트의 IP 주소와 현재 날짜 및 시간을 출력하는 서블릿 필터의 예시이다. 이 예는 서블릿 필터에 대한 기본적인 이해를 제공하며 동일한 개념을 사용하여 더 복잡한 필터 애플리케이션을 작성할 수 있습니다.
// 导入必需的 java 库 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( ){ /* 在 Filter 实例被 Web 容器从服务移除之前调用 */ } }
일반적인 방법으로 LogFilter.java를 컴파일하고 클래스를 배치하세요. <Tomcat-installation-directory>/webapps/ROOT/WEB-INF/classes에 있는 파일입니다.
Web.xml의 서블릿 필터 매핑
필터를 정의한 다음 이를 URL 또는 서블릿에 매핑합니다. 이는 서블릿을 정의한 후 URL 패턴에 매핑하는 것과 같습니다. 동일합니다. 배포 설명자 파일 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>
위 필터는 구성 <🎜에서 /*를 지정하기 때문에 모든 서블릿에 적용됩니다. > . 몇 개의 서블릿에만 필터를 적용하려는 경우 특정 서블릿 경로를 지정할 수 있습니다.
이제 일반적인 방법으로 서블릿을 호출하면 웹 서버에 생성된 로그를 볼 수 있습니다. Log4J 로거를 사용하여 위의 내용을 별도의 파일에 기록할 수도 있습니다. 다중 필터 사용웹 애플리케이션은 특정 목적에 따라 여러 가지 필터를 정의할 수 있습니다. 두 개의 필터AuthenFilter 및 LogFilter를 정의한다고 가정해 보겠습니다. 아래 설명과 같이 다른 매핑을 만들어야 하며 나머지 처리는 위에서 설명한 것과 거의 동일합니다.
<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> <filter-name>AuthenFilter</filter-name> <filter-class>AuthenFilter</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> <filter-mapping> <filter-name>AuthenFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>필터 적용 순서
web.xml의 filter-mapping 요소. xml 순서는 웹 컨테이너가 서블릿에 필터를 적용하는 순서를 결정합니다. 필터 순서를 바꾸려면 web.xml 파일에서 필터 매핑 요소를 바꾸면 됩니다. 예를 들어 위의 예에서는 LogFilter를 먼저 적용한 다음 AuthenFilter를 적용하지만 다음 예에서는 이 순서를 바꿉니다.
<filter-mapping> <filter-name>AuthenFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>LogFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>