使用Shiro插件保护Grails应用程序中的一些页面,但不是所有页面

时间:2010-02-05 12:14:52

标签: grails groovy shiro

可能只是我,但我很难理解如何使用Shiro插件保护Grails应用程序中的某些页面。

我在安全过滤器中使用它:

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)
      }
    }
  }
}

我在我的bootstrap中创建了一个用户:

    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 个答案:

答案 0 :(得分:1)

静态属性“过滤器”允许您定义多个过滤模式。您可以使用'uri'参数或'controller'参数。如果您使用'controller',您还可以添加'action'参数。这些参数中的每一个都采用正则表达式,因此您可以执行以下操作:

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

查看http://www.grails.org/Filters了解详情。