В чем разница между Сервлет и Фильтр? Что вы рекомендуете использовать для авторизации на страницах?
Сервлет и фильтр
Ответ 1
Используйте 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);
}
}
Ответ 2
Фильтры лучше всего подходят для авторизации. Это связано с тем, что они могут быть настроены для работы на всех страницах сайта. Поэтому вам нужен только один фильтр для защиты всех ваших страниц.
Ответ 3
Используя фильтр, мы можем улучшить производительность сервлета - когда запрос приходит, мы можем выполнить предварительную обработку по запросу, если запрос удовлетворяет, то мы можем перенаправить на сервлет, иначе дать сообщение клиенту, предоставить соответствующую информацию в запросе.