Фильтры 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) и настроены на автоматическое подключение по их именам.