должны ли фильтры Grails запускаться дважды вперед в этом случае? - PullRequest
2 голосов
/ 01 июня 2011

Согласно этой записи списка рассылки , фильтры пересылки должны вызываться при пересылке.который эффективно вызывает фильтры 1 + x number of forwards.

Однако в моей ситуации я подвергаю сомнению метод, как это сделать.Вот грубое мэшап моей системы:

  • у меня есть фильтр, который вызывается при условии uri "/api/**"
  • URL-адреса, который выглядит примерно так: "/api/$version/$apiKey/$rest**"
    • $rest может содержать (в качестве примера) значение /book/show/1
  • ApiController, единственной целью которого является перенаправление на другой URI в зависимости от $rest

Итак, допустим, я получаю доступ к URL /api/0.1/Ks38...7fn38/book/show/1, и тогда происходит то, что вызывается фильтр api, и он выполняет всю проверку версии и apiKey.затем он продолжает пересылку к uri /book/show/1, который затем вызывает фильтр Api во второй раз, даже если фильтр сопоставлен с /api/**, а новый uri фактически равен /book/....Теперь позвольте мне сказать, что я согласен с тем, что фильтры должны вызываться на форварде, но я не согласен с тем, что фильтр API должен вызываться во второй раз, когда я выполняю форвард на /book...

Это может 'правильное поведение?может это?

Ответы [ 2 ]

0 голосов
/ 28 мая 2014

хорошо, форвард технически не является новым «запросом» и использует исходный запрос. Если вы сравните forwardUri с контроллером / действием, вы заметите изменение. Вот как API Toolkit обрабатывает цепочки и предотвращает подобные коллизии.

0 голосов
/ 14 сентября 2011

Я столкнулся с той же проблемой и подробно ее обсуждал в списках рассылки Grails. Такое поведение присутствует с версии 1.2.x и вряд ли изменится.

В результате я смог сам «исправить» проблему, добавив параметр flash (flash.apiValid = true) перед пересылкой в ​​мой «ApiController», который затем проверяется в моем фильтре, чтобы предотвратить вызов ApiController еще раз.

Хотя это может быть не самое элегантное решение, оно работает. Надеюсь, вам это тоже поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...