Шаблон перехватывающего фильтра
Перехватывающий фильтр — это JavaEE шаблон , который создает подключаемые фильтры для стандартной обработки общих служб без необходимости внесения изменений в основной код обработки запросов. Фильтры перехватывают входящие запросы и исходящие ответы, обеспечивая предварительную и постобработку, и эти фильтры можно добавлять или удалять незаметно, не изменяя существующий код. [1] Этот шаблон прозрачно применяет многоразовую обработку до и после фактического выполнения запроса контроллерами передней панели и страницы. [2]
Структура
[ редактировать ]Менеджер фильтров, цепочка фильтров, фильтры и цель являются компонентами шаблона.
Менеджер фильтров
[ редактировать ]Это управляет обработкой фильтров, создает цепочку фильтров с соответствующими фильтрами в правильном порядке и инициирует обработку. [1]
Цепочка фильтров
[ редактировать ]Цепочка фильтров — это определенная серия фильтров, составленная таким образом, чтобы сформировать логическую цепочку. [1]
Фильтры
[ редактировать ]Это отдельные фильтры, которые сопоставлены с целью, а их обработка координируется цепочкой фильтров. [1]
Цель
[ редактировать ]Это ресурс, запрошенный клиентом. [1]
Последствия
[ редактировать ]Можно рассмотреть следующие преимущества:
- Улучшенная возможность повторного использования: общий код централизован в подключаемых компонентах, что упрощает повторное использование.
- Повышенная гибкость: универсальные общие компоненты можно применять и удалять декларативно, что повышает гибкость. [1] [2]
Снижение производительности может стать проблемой, поскольку излишне длинные цепочки перехватчиков и фильтров могут снизить производительность. [2]
Пример кода
[ редактировать ]Пример реализации кода для фильтров с настраиваемой стратегией фильтрации приведен ниже.
Код для реализации фильтра — фильтр отладки:
public class DebuggingFilter implements Processor {
private Processor target;
public DebuggingFilter(Processor myTarget) {
target = myTarget;
}
public void execute(ServletRequest req,
ServletResponse res) throws IOException,
ServletException {
//Do some filter processing here, such as
// displaying request parameters
target.execute(req, res);
}
}
Код для реализации фильтра — базовый процессор:
public class CoreProcessor implements Processor {
private Processor target;
public CoreProcessor() {
this(null);
}
public CoreProcessor(Processor myTarget) {
target = myTarget;
}
public void execute(ServletRequest req,
ServletResponse res) throws IOException,
ServletException {
//Do core processing here
}
}
Код для обработки запросов:
public void processRequest(ServletRequest req,
ServletResponse res)
throws IOException, ServletException {
Processor processors = new DebuggingFilter(
new AuthenticationFilter(new CoreProcessor()));
processors.execute(req, res);
//Then dispatch to next resource, which is probably
// the View to display
dispatcher.dispatch(req, res);
}
Код менеджера фильтров:
public void processRequest(ServletRequest req,
ServletResponse res)
throws IOException, ServletException {
Processor processors = new DebuggingFilter(
new AuthenticationFilter(new CoreProcessor()));
processors.execute(req, res);
//Then dispatch to next resource, which is probably
// the View to display
dispatcher.dispatch(req, res);
}
Код для цепочки фильтров:
public class FilterChain {
// filter chain
// apply filters
for (final Filter filter : filters)
{
// pass request & response through various
// filters
filter.execute(request, response);
}
}
}
См. также
[ редактировать ]- Передний контроллер
- Шаблон декоратора
- Шаблон метода шаблона
- Шаблон перехватчика
- Конвейер (программное обеспечение)
Ссылки
[ редактировать ]- ^ Jump up to: а б с д и ж г час я дж к «Основные шаблоны J2EE — перехватывающий фильтр» . Оракул . Оракул . Проверено 6 февраля 2016 г.
- ^ Jump up to: а б с Каял, Д. (2008). Профессиональные шаблоны Spring EE для Java EE . Нью-Йорк: Апресс. стр. 98–106.