Используйте Filter
, если хотите фильтровать и / или изменять запросы на основе определенных условий. Используйте Servlet
, если хотите управлять, обрабатывать и / или постобрабатывать запросы.
В руководстве Java EE упоминается следующее о фильтрах:
Фильтр - это объект, который может преобразовывать заголовок и содержимое (или оба) запроса или ответа. Фильтры отличаются от веб-компонентов тем, что сами фильтры обычно не создают ответ. Вместо этого фильтр обеспечивает функциональность, которую можно «прикрепить» к любому веб-ресурсу. Следовательно, фильтр не должен иметь никаких зависимостей от веб-ресурса, для которого он выступает в качестве фильтра; таким образом, он может быть составлен из нескольких типов веб-ресурсов.
Основные задачи, которые может выполнять фильтр:
- Запросите запрос и действуйте соответственно.
- Блокировать дальнейшую передачу пары запрос-ответ.
- Изменить заголовки запроса и данные. Вы делаете это, предоставляя настроенную версию запроса.
- Изменить заголовки ответа и данные. Вы делаете это, предоставляя настроенную версию ответа.
- Взаимодействие с внешними ресурсами.
Для авторизации лучше всего подойдет Filter
. Вот базовый пример того, как фильтр проверяет запросы вошедшего в систему пользователя:
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
if (((HttpServletRequest) request).getSession().getAttribute("user") == null) {
// User is not logged in. Redirect to login page.
((HttpServletResponse) response).sendRedirect("login");
} else {
// User is logged in. Just continue with request.
chain.doFilter(request, response);
}
}