Шаблон перехватывающего фильтра - Intercepting filter pattern
Перехватывающий фильтр это JavaEE шаблон который создает подключаемые фильтры для стандартной обработки общих служб, не требуя изменений в основном коде обработки запросов. Фильтры перехватывают входящие запросы и исходящие ответы, обеспечивая предварительную и постобработку, и эти фильтры могут быть добавлены или удалены незаметно, без изменения существующего кода.[1] Этот шаблон применяет многоразовую обработку прозрачно до и после фактического выполнения запроса контроллерами передней и страницы.[2]
Структура
Диспетчер фильтров, цепочка фильтров, фильтры и цель являются компонентами шаблона.
Менеджер фильтров
Это управляет обработкой фильтров и создает цепочку фильтров с соответствующими фильтрами в правильном порядке и инициирует обработку.[1]
Цепочка фильтров
Цепочка фильтров - это особая серия фильтров, составленная таким образом, чтобы сформировать логическую цепочку.[1]
Фильтры
Это отдельные фильтры, которые отображаются на цель, и их обработка координируется цепочкой фильтров.[1]
Цель
Это ресурс, запрошенный клиентом.[1]
Последствия
Можно рассматривать следующие преимущества:
- Улучшенная возможность повторного использования: общий код централизован во подключаемых компонентах, что упрощает повторное использование.
- Повышенная гибкость: общие общие компоненты можно применять и удалять декларативно, повышая гибкость.[1][2]
Снижение производительности может быть связано с тем, что излишне длинные цепочки перехватчиков и фильтров могут снизить производительность.[2]
Образец кода
Ниже приведен пример реализации кода для фильтров с настраиваемой стратегией фильтрации.
Код для реализации фильтра - фильтр отладки:
общественный учебный класс DebuggingFilter орудия Процессор { частный Процессор цель; общественный DebuggingFilter(Процессор myTarget) { цель = myTarget; } общественный пустота выполнять(ServletRequest req, ServletResponse res) бросает IOException, ServletException { // Выполните здесь некоторую обработку фильтра, например // отображение параметров запроса цель.выполнять(req, res); }}
Код для реализации фильтра - базовый процессор:
общественный учебный класс CoreProcessor орудия Процессор { частный Процессор цель; общественный CoreProcessor() { это(ноль); } общественный CoreProcessor(Процессор myTarget) { цель = myTarget; } общественный пустота выполнять(ServletRequest req, ServletResponse res) бросает IOException, ServletException { // Здесь выполняется основная обработка }}
Код для обработки запросов:
общественный пустота processRequest(ServletRequest req, ServletResponse res) бросает IOException, ServletException { Процессор процессоры = новый DebuggingFilter( новый AuthenticationFilter(новый CoreProcessor())); процессоры.выполнять(req, res); // Затем отправляем на следующий ресурс, который, вероятно, // Вид для отображения диспетчер.отправлять(req, res);}
Код для диспетчера фильтров:
общественный пустота processRequest(ServletRequest req, ServletResponse res) бросает IOException, ServletException { Процессор процессоры = новый DebuggingFilter( новый AuthenticationFilter(новый CoreProcessor())); процессоры.выполнять(req, res); // Затем отправляем на следующий ресурс, который, вероятно, // Вид для отображения диспетчер.отправлять(req, res);}
Код для цепочки фильтров:
общественный учебный класс FilterChain { // цепочка фильтров // применяем фильтры за (окончательный Фильтр фильтр : фильтры) { // передать запрос и ответ через различные // фильтры фильтр.выполнять(запрос, отклик); } }}
Смотрите также
- Передний контроллер
- Шаблон декоратора
- Шаблон метода шаблона
- Образец перехватчика
- Pipeline (программное обеспечение)