Подтвердить что ты не робот

Фильтры против перехватчиков в Struts 2

Какая разница, действительно, между фильтрами и перехватчиками? Я понимаю, что перехватчики срабатывают до и после действия, рекурсивно, и фильтры могут быть настроены на срабатывание действий и определенных шаблонов URL. Но как вы знаете, когда использовать их?

В книге, которую я читаю на Struts 2, кажется, что перехватчики нажимаются, и я даже следовал учебнику, чтобы написать Interceptor Authentication, чтобы убедиться, что пользователь вошел в систему. Однако, если пользователь пытается получить доступ к URL-адрес, который не имеет связанного с ним действия, перехватчик не поймает его, что означает, что мне нужно будет связать действие с каждым jsp, который я хочу быть безопасным. Это не кажется правильным.

Я могу создать фильтр проверки подлинности, который обрабатывает URL-адреса, так что мне не нужно это делать, но тогда, что точка перехватчиков?

4b9b3361

Ответ 1

Самое существенное отличие заключается в том, что "перехватчики" являются частью рамок Struts 2 и являются лишь частью обработки запросов, выполняемой каркасом Struts 2. "Фильтры", с другой стороны, являются частью спецификации сервлета; другими словами, они являются частью API Servlet. Если вы используете Struts 2, вы должны использовать перехватчики для функциональности упаковки вокруг ваших действий Struts 2. Если вы пытаетесь обернуть функциональность вокруг запросов, поступающих на ваш webapp, но не обрабатываться Struts 2, тогда фильтр может быть более уместным.

BTW, вся Struts 2 Framework развернута внутри фильтра, настроенного в вашем веб-приложении, объявленного в дескрипторе развертывания webapp (web.xml), например:

    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>

     <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

Этот фильтр, который настроен на улавливание всех шаблонов URL-адресов запросов, является точкой входа во всю структуру Struts 2.

Надеюсь, это поможет.

Ответ 2

стек перехватчика срабатывает при каждом запросе.
фильтры применяются только к URL-адресам, для которых они определены.

edit - вы используете тот или иной в зависимости от необходимости. Допустим, вам нужно подтвердить, что cookie присутствует для каждого запроса. Пользователь перехватчик. Предположим, что вам нужно выставить внешнее приложение для некоторых запросов (с помощью URL-адреса), использовать фильтр.

Я думаю, что перехватчики являются наиболее часто используемым инструментом...

почему у вас есть URL-адрес без связанного действия?

Ответ 3

Что такое Interceptor?

В Struts 2 Framework используется концепция перехватчиков для совместного использования решения для некоторых общих проблем различными действиями.

Как мы знаем, фреймворк вызывает конкретный объект Action на подчинении запроса для него. Но перед выполнением Action, вызов перехватывается каким-либо другим объектом для обеспечения дополнительной обработки.

Аналогично после выполнения Action, вызов может быть снова перехвачен. Этот объект перехвата известен как Interceptor.

Таким образом, цель использования Interceptor заключается в том, чтобы обеспечить больший контроль над уровнем контроллера и разделить некоторую общую логику, применимую к нескольким действиям.

Структура Struts 2 уже предоставила собственный набор перехватчиков, которые могут быть использованы в приложении для обеспечения требуемой обработки до и после выполнения классов Action.

Один из них - "Alias ​​Interceptor", который я собираюсь обсудить здесь.

Перехватчик псевдонимов:

Alias ​​Interceptor используется в случае цепочки действий. Цепочка действий означает, что одно действие вызывает другое действие после успешного выполнения первого действия.

Этот перехватчик псевдонизирует именованный параметр для другого имени параметра. В цепочке действий, когда два разных класса действия имеют общий параметр с другим именем, этот Interceptor используется, чтобы присвоить псевдоним пармеру первого класса действия, который соответствует имени параметра во втором классе действий.

Выражение псевдонима действия должно быть в форме:

             #{ 'name1' : 'alias1' , 'name2' : 'alias2' }

Ответ 4

В соответствии с жизненным циклом/архитектурой стойки 2 перед фильтром не выполняются перехватчики. Поэтому, если для вашего запроса нет сопоставления действий, он не работает при прохождении через фильтр.

Ответ 5

Struts 2 Framework не зависит от API сервлета. Действия Struts 2 не связаны с контейнером. Чаще всего контексты сервлетов представлены в виде простых Карт, позволяя Действиям тестироваться изолированно.

Фильтр является частью API Servlet, поэтому Struts 2 Framework использует концепцию Interceptors для совместного использования решения для некоторых общих проблем различными действиями.

Также вы можете легко написать тестовые примеры для класса Interceptor и Action.

Ответ 6

Как правило,

  • Фильтры запускаются перед каждым request. Сам struts является фильтром.
  • interceptors может запускаться до, после действий struts. Они не будут выполняться, если запрос не заканчивается на .action.

Итак, некоторым примером фильтров может быть:

  • Если вы хотите сжать ваши файлы js и css, вы должны использовать фильтры, не перехватчики.
  • Если вы хотите, чтобы только определенный IP-адрес обращался к вашему веб-сайту, вы должны разработать его как фильтр и проверить ip-адрес запроса.
  • Если вы хотите защитить свой сайт от атаки CSRF, вы должны написать фильтр, чтобы проверить токен CSRF на запросы.
  • Если вы хотите зарегистрировать ответ своего сайта за время запроса, вы можете использовать фильтр для расчета времени до и после chain.doFilter(request, response)

Теоретически вы можете разработать веб-приложение struts без разработки собственного interceptors и использования filters. Но вы столкнетесь с множеством проблемных и кодовых фильтров котла.

Множество функций struts 2 построено с помощью перехватчиков, вы можете найти его в struts-default.xml(https://struts.apache.org/docs/struts-defaultxml.html), этот список будет помочь найти, когда можно использовать перехватчики. (Например, ParametersInterceptor выполняет перед действиями, чтобы применить отображаемые значения формы к действиям)

При работе с перехватчиками вы можете легко получить доступ к функциям struts, например getText из ресурсов сообщений, получить текущее имя действия и пространство имен, изменить поток действий.

Здесь рассмотрены некоторые случаи, которые могут быть разработаны перехватчиками:

  • Если вы хотите, чтобы только зарегистрированные пользователи могли получить доступ к определенным действиям, вы должны разработать его с помощью перехватчиков.
  • Если вы хотите отслеживать, какие действия пользователь навигация. Вы можете использовать перехватчик для отслеживания посещенных действий.
  • Если вы хотите обрабатывать свои ошибки действий в одной точке, вы можете использовать перехватчик, который улавливает все invocation.invoke()

Перехватчики предоставляют фильтр и шаблон дизайна Chain of Responsibility для действий struts, в то время как фильтры предоставляют этот шаблон для всего вашего веб-приложения.