Защищайте некоторые, но не все страницы в приложении Grails с помощью плагина Shiro - PullRequest
0 голосов
/ 05 февраля 2010

Может быть, только я, но мне трудно понять, как защитить только некоторые страницы в приложении Grails с помощью плагина Shiro.

Я использую это в моем фильтре безопасности:

class SecurityFilters {
  def filters = {
    all(uri: "/**") {
      before = {
        // Ignore direct views (e.g. the default main index page).
        if (!controllerName) return true

        // Access control by convention.
        accessControl ( auth:false)
      }
    }
  }
}

и я создал пользователя в моей начальной загрузке:

    def adminRole = new Role(name: "Administrator")
    adminRole.addToPermissions("secured1")
    adminRole.addToPermissions("secured2:create,save,edit,update")
    adminRole.save()

    def user = new User(username: "admin", passwordHash: new Sha512Hash("***").toHex())
    user.addToRoles Role.findByName('Administrator')
    user.save()

и это работает. Проблема в том, что он также защищает все контроллеры / действия.

Я надеялся, что в моем SecurityFilter можно НЕ указывать действия, которые я хочу защитить, а только в разрешениях. Но возможно ли это?

1 Ответ

1 голос
/ 05 февраля 2010

Статическое свойство filter позволяет вам определять несколько шаблонов фильтрации. Вы можете использовать параметр «uri» или «controller». Если вы используете 'controller', вы также можете добавить параметр 'action'. Каждый из этих параметров принимает регулярное выражение, поэтому вы можете делать такие вещи, как:

admin(uri:"/admin/**")
...
browseStore(controller:"store", action:"(show|list)")
...
shopStore(controller:"store", action:"*")
...

Проверьте http://www.grails.org/Filters для получения дополнительной информации.

...