Шаблон перехватывающего фильтра - 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);  }}

[1]

Код для реализации фильтра - базовый процессор:

общественный учебный класс CoreProcessor орудия Процессор {  частный Процессор цель;  общественный CoreProcessor()   {    это(ноль);  }  общественный CoreProcessor(Процессор myTarget)   {    цель = myTarget;  }  общественный пустота выполнять(ServletRequest req,       ServletResponse res) бросает IOException,       ServletException   {    // Здесь выполняется основная обработка  }}

[1]

Код для обработки запросов:

общественный пустота processRequest(ServletRequest req,   ServletResponse res)   бросает IOException, ServletException {  Процессор процессоры = новый DebuggingFilter(     новый AuthenticationFilter(новый CoreProcessor()));  процессоры.выполнять(req, res);  // Затем отправляем на следующий ресурс, который, вероятно,   // Вид для отображения  диспетчер.отправлять(req, res);}

[1]

Код для диспетчера фильтров:

общественный пустота processRequest(ServletRequest req,   ServletResponse res)   бросает IOException, ServletException {  Процессор процессоры = новый DebuggingFilter(     новый AuthenticationFilter(новый CoreProcessor()));  процессоры.выполнять(req, res);  // Затем отправляем на следующий ресурс, который, вероятно,   // Вид для отображения  диспетчер.отправлять(req, res);}

[1]

Код для цепочки фильтров:

общественный учебный класс FilterChain {  // цепочка фильтров     // применяем фильтры    за (окончательный Фильтр фильтр : фильтры)    {      // передать запрос и ответ через различные       // фильтры      фильтр.выполнять(запрос, отклик);    }  }}

[1]

Смотрите также

Рекомендации

  1. ^ а б c d е ж грамм час я j k «Основные шаблоны J2EE - перехватывающий фильтр». Oracle. Oracle. Получено 6 февраля 2016.
  2. ^ а б c Каял, Д. (2008). Шаблоны Pro Java EE Spring. Нью-Йорк: Апресс. С. 98–106.