2014-12-24 1 views
2

Я создам фильтр безопасности для своего проекта. Я проверяю if !session.user then redirect to action error. Вот мой текущий код:Grails security filter все действия, кроме одного

all(controller: 'accounting|installation|installer|sales|service|serviceOrder|document', action: '*') { 
      before = { 
       if (!session.user) { 
        redirect(controller: 'installation', action: 'errors') 
        return false 
       } 
      } 
      after = { Map model -> 

      } 
      afterView = { Exception e -> 

      } 
     } 

Однако дело в том, что session.user создается в controller 'installation' и action 'index'. Так как я могу фильтровать без index action? Любые предложения будут оценены. Благодарю.

+0

Вы хотите проверить ', если (! Session.user) {...}' на действия всех контроллера для '' index'action из installation' контроллера кроме ?? – Abs

+0

Да, это все, что мне нужно –

ответ

1

Попробуйте

all(controller: 'accounting|installation|installer|sales|service|serviceOrder|document', action: '*') { 
     before = { 
     if (!(controllerName == 'installation' && actionName == 'index')) { 
      if (!session.user) { 
       redirect(controller: 'installation', action: 'errors') 
       return false 
      } 
      } 
     } 
     after = { Map model -> 

     } 
     afterView = { Exception e -> 

     } 
    } 
+0

Ребята, я попробовал ваше решение и получил это сообщение: «Firefox обнаружил, что сервер перенаправляет запрос на этот адрес таким образом, который никогда не будет завершен. Эта проблема иногда может быть вызвана отключением или отказом принимать файлы cookie. ' –

+0

попробуйте включить файлы cookie в вашем браузере: https://support.mozilla.org/en-US/kb/enable-and-disable-cookies-website-preferences –

0

Надежда Я понял ваш вопрос, так как вы хотите, чтобы исключить индекс действий, то, попробуйте это ..

all(controller: 'accounting|installation|installer|sales|service|serviceOrder|document', action: '*',actionExclude:'index'){.... 

С уважением

+0

Ребята, я попробовал ваше решение и получил это сообщение: 'Firefox обнаружил, что сервер перенаправляет запрос на этот адрес таким образом, который никогда не будет завершен. Эта проблема иногда может быть вызвана отключением или отказом принимать файлы cookie. ' –

+0

1. Включить файл cookie. 2. «Очистить кеш»: Инструменты> Параметры> Дополнительно> Сеть> Кэшированный веб-контент: «Очистить сейчас» 3. Также попробуйте в другом браузере. Это может быть вызвано поврежденными куки-файлами или куки-файлами, которые не отправляются или иным образом блокируются. http://kb.mozillazine.org/Cookies –

3

Вы можете использовать invert:true например

def filters = { 
    allExceptIndex(controller:"installation",action:"index",invert:true) { 
     before = { 
     } 
     after = { Map model -> 
     } 
     afterView = { Exception e -> 
     } 
    } 
} 

Для дальнейшей ссылки см Blog