как выполнить функцию перед каждым новым запросом на контроллер в граалях - PullRequest
4 голосов
/ 27 марта 2012

Мне нужно выполнить функцию перед каждым вызовом def в контроллере (перед отправкой каждого нового запроса на сервер).В этой функции я буду 1) делать проверку сеанса, если он действителен, переадресовывать запрос соответствующему действию и контроллеру с параметрами 2) выполнять проверку очистки для отправленных пользователем параметров

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

как и где я могу вызвать эту функцию в Grails?Заранее спасибо ..

Ответы [ 3 ]

6 голосов
/ 27 марта 2012

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

Примечание : Если у вас уже есть какой-то общий контроллер, который расширяется всеми другими контроллерами, нет необходимости внедрять новый контроллер.Просто внедрите beforeInterceptor в самом контроллере.

В качестве альтернативы, вы можете внедрить фильтр и выполнять все свои действия в этом фильтре.Для получения дополнительной информации о фильтрах в Grails Нажмите здесь

4 голосов
/ 27 марта 2012

Вы можете добавить фильтр следующим образом, чтобы перехватывать каждое действие


class AbcFilters {
 def filters = {
  abc1(controller: '*', action: '*') {
  }

  abc2(controller: '*Test', action: '*') {
  }


  abc2(controllerExclude: 'AppStartup*', action: '*') {

  }
 }
}
3 голосов
/ 27 марта 2012

Вот фильтр для каждого действия в каждом контроллере:

all(controller: '*', action: '*') {
    before = {

    }
    after = {

    }
    afterView = {

    }
}

вот фильтр для проверки сеанса, который использует пружинную безопасность:

     auditEntry(controller:'*', action:'*') {
            before = {
                if (session.isNew()){
                    def userName
                    def principal = SCH?.context?.authentication?.principal 
                    if (principal instanceof String){
                        userName = principal
                        log.info "Anonymous user has logged into the application."
                    }else{
                        userName = principal?.username
                        log.info "User $userName has logged into the application."
                        log.debug (principal)
                    }
                }
            }
        }
...