Фильтры Grails против Interceptor
Я изучаю Grails уже довольно давно. И немного отсканировал о фильтрах и перехватчиках. Оба имеют почти такую же функциональность отслеживания сеансов или перенаправления неавторизованных пользователей в конкретный контроллер.
Но я смущен, когда и почему я должен использовать фильтр, чем перехватчик, и наоборот.
Учитывая, что у Inceptors есть два метода управления beforeInterceptor
и afterInterceptor
, а для фильтров - три общих замыкания before
, after
и afterView
.
Мои вопросы - вот за что и против использования фильтра против перехватчика или наоборот. Таким образом, мы, разработчики, можем решить, когда, где и почему мы должны использовать фильтр или перехватчик в определенном контроллере для выполнения некоторых отслеживаний, перенаправления и т.д.
Ответы
Ответ 1
Используйте один или оба перехватчика в контроллере, когда логика перехвата применяется только к этому контроллеру.
Использовать фильтр, когда логика применяется к нескольким (или всем) контроллерам или когда вам нужно что-то делать после визуализации представления (нет эквивалента перехватчика afterView), или если вы просто хотите, чтобы все было централизовано в одном вместо распространения через отдельные файлы контроллера.
Ответ 2
Старые фильтры (от Grails 2) устарели в Grails 3. Замена фильтров - это перехватчики.
Использование перехватчиков для таких действий, как: аутентификация, loggin и т.д.
Перехватчики (как следует из их названия) перехватывают входящие веб-запросы и вызывают связанные действия. Действия определяются в соответствующем контроллере.
У перехватчиков есть некоторые основные преимущества (над фильтрами), такие как поддержка статической компиляции и возможность гибкой конфигурации.
Это основные 3 метода перехватчика:
- boolean before() {true}
- boolean after() {true}
- void afterView() {}
Iterceptors настроены как Spring Beans (в контексте приложения Spring) и настроены на автоматическое подключение по их именам.