JSP-필터
이 장에서는 JSP의 필터에 대해 설명합니다. 서블릿 및 JSP 필터는 다음 목적을 위해 서블릿 및 JSP 프로그래밍에서 사용할 수있는 Java 클래스입니다.
백엔드에서 리소스에 액세스하기 전에 클라이언트의 요청을 차단합니다.
클라이언트로 다시 보내기 전에 서버의 응답을 조작합니다.
사양에서 제안하는 다양한 유형의 필터가 있습니다.
- 인증 필터
- 데이터 압축 필터
- 암호화 필터
- 리소스 액세스 이벤트를 트리거하는 필터
- 이미지 변환 필터
- 로깅 및 감사 필터
- MIME-TYPE 체인 필터
- 토큰 화 필터
- XML 콘텐츠를 변환하는 XSL / T 필터
필터는 배치 설명자 파일에 배치됩니다. web.xml그런 다음 애플리케이션의 배포 설명자에서 서블릿 또는 JSP 이름 또는 URL 패턴에 매핑합니다. 배포 설명자 파일 web.xml은 <Tomcat-installation-directory> \ conf 디렉터리 에서 찾을 수 있습니다 .
JSP 컨테이너는 웹 애플리케이션을 시작할 때 배포 설명자에서 선언 한 각 필터의 인스턴스를 만듭니다. 필터는 배포 설명자에 선언 된 순서대로 실행됩니다.
서블릿 필터 방법
필터는 단순히 다음을 구현하는 Java 클래스입니다. javax.servlet.Filter상호 작용. javax.servlet.Filter 인터페이스는 세 가지 메소드를 정의합니다.
S. 아니. | 방법 및 설명 |
---|---|
1 | public void doFilter (ServletRequest, ServletResponse, FilterChain) 이 메서드는 체인 끝에서 리소스에 대한 클라이언트 요청으로 인해 요청 / 응답 쌍이 체인을 통해 전달 될 때마다 컨테이너에 의해 호출됩니다. |
2 | public void init(FilterConfig filterConfig) 이 메소드는 웹 컨테이너에서 호출되어 서비스에 배치되고 있음을 필터에 표시합니다. |
삼 | public void destroy() 이 메소드는 웹 컨테이너에서 호출되어 서비스에서 제외되고 있음을 필터에 표시합니다. |
JSP 필터 예
다음 예는 JSP 파일에 액세스 할 때마다 클라이언트의 IP 주소와 현재 날짜 시간을 인쇄하는 방법을 보여줍니다. 이 예제는 JSP 필터에 대한 기본적인 이해를 제공하지만 동일한 개념을 사용하여보다 정교한 필터 애플리케이션을 작성할 수 있습니다.
// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
// Implements Filter class
public class LogFilter implements Filter {
public void init(FilterConfig config) throws ServletException {
// Get init parameter
String testParam = config.getInitParameter("test-param");
//Print the init parameter
System.out.println("Test Param: " + testParam);
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws java.io.IOException, ServletException {
// Get the IP address of client machine.
String ipAddress = request.getRemoteAddr();
// Log the IP address and current timestamp.
System.out.println("IP "+ ipAddress + ", Time "+ new Date().toString());
// Pass request back down the filter chain
chain.doFilter(request,response);
}
public void destroy( ) {
/* Called before the Filter instance is removed
from service by the web container*/
}
}
엮다 LogFilter.java 일반적인 방법으로 LogFilter.class 파일 <Tomcat-installation-directory>/webapps/ROOT/WEB-INF/classes.
Web.xml의 JSP 필터 매핑
Servlet이 정의 된 다음 URL 패턴에 매핑되는 것과 거의 동일한 방식으로 필터가 정의 된 다음 URL 또는 JSP 파일 이름에 매핑됩니다. web.xml파일. 배포 설명자 파일에서 필터 태그에 대한 다음 항목을 만듭니다.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에만 필터를 적용하려는 경우 특정 서블릿 또는 JSP 경로를 지정할 수 있습니다.
이제 서블릿 또는 JSP를 호출하면 웹 서버 로그에 생성 된 로그가 표시됩니다. 당신이 사용할 수있는Log4J logger 위에 로그인하려면 별도의 파일에 로그인하십시오.
여러 필터 사용
웹 애플리케이션은 특정 목적으로 여러 가지 다른 필터를 정의 할 수 있습니다. 두 개의 필터 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에서 필터 매핑 요소의 순서는 웹 컨테이너가 서블릿 또는 JSP에 필터를 적용하는 순서를 결정합니다. 필터의 순서를 바꾸려면 필터 매핑 요소를web.xml 파일.
예를 들어, 위의 예는 먼저 LogFilter를 적용한 다음 AuthenFilter를 모든 서블릿 또는 JSP에 적용합니다. 다음 예제는 순서를 반대로합니다.
<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>