Каково различие между Сервлетом и Фильтром? Что Вы рекомендуете использовать для авторизации для страниц?
Используйте Фильтр
, когда вы хотите фильтровать и/или изменять запросы на основе определенных условий. Используйте сервлет
, когда вы хотите контролировать, предварительно обрабатывать и/или пост-обрабатывать запросы.
В учебнике по Java EE упоминается следующее о фильтрах:
Фильтр - это объект, который может преобразовывать заголовок и содержимое (или оба) запроса или ответа. Фильтры отличаются от веб-компонентов тем, что фильтры обычно сами не создают ответ. Вместо этого фильтр предоставляет функциональность, которая может быть "прикреплена" к любому виду веб-ресурса. Следовательно, фильтр не должен иметь никаких зависимостей от веб-ресурса, для которого он выступает в качестве фильтра; таким образом, он может быть составлен из нескольких типов веб-ресурсов.
Основные задачи, которые может выполнять фильтр, следующие:
- Запрос запроса и соответствующие действия.
- Блокировать пару запрос-ответ от дальнейшего прохождения.
- Изменить заголовки и данные запроса. Это делается путем предоставления адаптированной версии запроса.
- Измените заголовки и данные ответа. Вы делаете это, предоставляя адаптированную версию ответа.
- Взаимодействовать с внешними ресурсами.
Для авторизации лучше всего подходит Фильтр
. Вот базовый пример того, как фильтр проверяет запросы на наличие вошедшего пользователя:
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);
}
}
Фильтры лучше всего подходят для авторизации. Это потому, что их можно настроить для работы на всех страницах сайта. Таким образом, вам нужен только один фильтр для защиты всех ваших страниц.