public void init (FilterConfig config) throws ServletException {
this.config = config;
String act = config.getInitParameter("active");
if (act != null) {
active = (act.toUpperCase().equals("TRUE"));
}
}
Filter
Как централизованно добавлять изменять реализовать:
Logging
Authorization
Authentication
Как добавить дополнительную:
Post-processing
Pre-processing
Servlet: Filter
Java-объекты
Могут выполнять действия с запросами и ответами перед выполнением Servlet, например:
Изменять исходные данные выполняемого запроса
Изменять ответ Servlets
Блокировать определённые Servlets
Filter
jakarta.servlet.Filter
Интерфейс, служащий для создания новых фильтров
Содержит методы:
void init(FilterConfig config)
void destroy()
void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
При создании фильтра единожды запускается метод init()
При уничтожении фильтра выполняется метод destroy()
При каждом обращении к Servlet, с которым связан filter, выполняется метод doFilter()
init()
Метод init()
получает на вход объект класса FilterConfig
, содержащий исходные данные для фильтра. Данные могут быть получены так же как в Servlet, с помощью метода getInitParameter()
.
public void init (FilterConfig config) throws ServletException {
this.config = config;
String act = config.getInitParameter("active");
if (act != null) {
active = (act.toUpperCase().equals("TRUE"));
}
}
doFilter()
Метод выполняет обработку HttpRequest
/HttpResponse
Объект FilterChain
хранит информацию о цепочке фильтров
В методе обязательно нужно вызвать метод chain.doFilter(…)
для запуска других фильтров и Servlets
public void doFilter (ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// Код обработки запроса
chain.doFilter(request, response);
}
Filters должны регистрироваться в web.xml
аналогично Servlets. Для этого используется тег <filter>
. В нем кроме самого filter прописываются исходные параметры:
<filter>
<filter-name>Encoder</filter-name>
<filter-class>filter.Utf8EncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-true>
</init-param>
</filter>
Параметры инициализации будут доступны в методе init()
filter
Зарегистрированный filter должен быть подключен к servlet
Подключение можно сделать к одному servlet, или сразу к нескольким
Подключение к конкретному servlet выполняется следующим образом
<filter-mapping>
<filter-name>FilterName</filter-name>
<servlet-name>ServletName</servlet-name>
</filter-mapping>
Также можно привязать filter к группе servlets и других страниц по адресу:
<filter-mapping>
<filter-name>FilterName</filter-name>
<url-pattern>/admin/*</url-pattern>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
В данном случае filter будет привязан к servlets, адреса которых соответствуют данному url-pattern.
Значения dispatcher
:
REQUEST
- обработка только запросов от пользователя
FORWARD
- обработка только forward-запросов
Для регистрации можно использовать аннотацию @WebFilter
@WebFilter(urlPatterns = "*")
public class Encoder implements Filter {
// …
}
Authentication - проверка соответствия субъекта и того, за кого он пытается себя выдать, с помощью некой уникальной информации (например, имени пользователя и пароля)
Authorization - проверка и определение полномочий на выполнение некоторых действий (например, чтение файла) в соответствии с ранее выполненное аутентификацией