2012-05-04 3 views
1

Я пытаюсь использовать ACL plugin в моем приложении grails. На основе приведенного в этом уроке примера, http://grails-plugins.github.com/grails-spring-security-acl/docs/manual/guide/3.%20Tutorial.html Мне нужно создать Service, который будет реализовывать аннотации @PreAuthorize, @PostAuthorize, @PreFilter, and @PostFilter.Как использовать плагин ACL?

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

Annotation @org.springframework.security.access.prepost.PreAuthorize is not allowed on element FIELD 

Означает ли это, @PreAuthorize аннотаций не подходит для вызова по каждому действию в контроллере?

Пожалуйста, помогите.

ответ

3

Да, он не работает на контроллерах, только на сервисах (и других весенних бобах). Он может работать на методах в контроллерах 2.0, поскольку контроллеры являются Spring beans, но я не пробовал.

Проблема в том, что Spring Security ничего не знает о закрытии, поскольку они являются концепцией Groovy. Они вызываются для обработки веб-запросов от Grails, но не могут быть перехвачены весной, поскольку он работает только с методами.

Это связано с вопросом о транзакционных услугах и закрытиях. Вы не можете определить закрытие в службе и иметь ее транзакционную, поскольку Spring ее не видит. Groovy позволяет вам называть закрытие, как если бы они были методами, но это просто синтаксический сахар.

+0

Большое вам спасибо! Таким образом, это означает, что у меня нет выбора, кроме как создать службу для каждого контроллера, чтобы я мог использовать плагин ACL. У меня есть еще один вопрос: есть ли альтернативный способ назначения разрешений для каждого действия, кроме использования плагина ACL? Спасибо большое! – chemilleX3

+0

Вам не нужен 1-1 между контроллером и сервисом; вы могли бы поместить все в одну услугу, так как логика схожа, но, конечно, нескольких было бы достаточно. –

+0

Большое вам спасибо. Возможно ли, что вместо того, чтобы создавать сервисы для меня, чтобы использовать упомянутые аннотации, я просто преобразую действия в своих контроллерах в методы? Это будет логический подход? – chemilleX3

Смежные вопросы