Фильтр – это класс Java, реализующий интерфейс Filter, и выполняющий роль препроцессора запроса. С помощью фильтра можно осуществить доступ к ресурсу непосредственно перед запросом, блокировать, предварительно обработать или модифицировать запрос, изменить ответ и т. п.
Фильтры могут быть использованы для различных ресурсов: сервлетов, jspстраниц, html-страниц и др. Один и тот же фильтр может быть назначен разным ресурсам. С другой стороны одному ресурсу может быть назначено несколько фильтров – в этом случае они образуют цепочкуфильтров.
Технология фильтров основывается на использовании трех основных интерфейсов: Filter, FilterChain и FilterConfig.
- Интерфейс Filter является важнейшим интерфейсом и предназначен для фильтрации запросов и ответов.
- Интерфейс FilterChain реализуется web-контейнером и используется для организации цепочки фильтров. С помощью этого интерфейса можно заблокировать доступ к ресурсу.
- Интерфейс FilterConfig тоже реализуется web-контейнером и предназначен для информирования фильтра о его окружении.
|
|
Любой фильтр должен реализовать три обязательных метода: init, destroy и doFilter. Все методы вызываются web-контейнером, а последовательность их вызова определяет жизненный цикл фильтра.
package flt;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Flt1 implements Filter {
public void init(FilterConfig cfg) throws ServletException {
System. out. println("Flt1:init");
}
public void destroy() {
System. out. println("Flt1:destroy");
}
public void doFilter(ServletRequest rq, ServletResponse rs, FilterChain ch)
throws IOException, ServletException {
}
}
<filter>
<filter-name>Flt1</filter-name>
<filter-class>flt.Flt1</filter-class>
</filter>
<filter-mapping>
<filter-name>Flt1</filter-name>
<url-pattern>/ Sss </url-pattern>
</filter-mapping>