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

Posted

技术标签:

【中文标题】使用 Shiro 插件保护 Grails 应用程序中的一些页面,但不是所有页面【英文标题】:Secure some, but not all pages in a Grails application with the Shiro plugin 【发布时间】:2011-01-13 12:07:19 【问题描述】:

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

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

类 SecurityFilters 
  def 过滤器 = 
    全部(uri:“/**”)
      之前 = 
        // 忽略直接视图(例如默认的主索引页面)。
        if (!controllerName) 返回真

        // 按照惯例进行访问控制。
        访问控制(身份验证:假)
      
    
  

我已经在我的引导程序中创建了一个用户:

def adminRole = 新角色(名称:“管理员”) 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') 用户保存()

它有效。问题是,它还保护所有控制器/操作。

我希望,可以不在我的 SecurityFilter 中指定我想要保护的操作,而只能在权限中指定。但这可能吗?

【问题讨论】:

【参考方案1】:

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

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

查看http://www.grails.org/Filters 了解更多信息。

【讨论】:

是的,但我的想法是我可以在角色的 addToPermissions 中定义它,所以我不必在 SecurityFilter 中这样做。但感谢您的意见 过滤器是访问控制发生的地方。如果您有一些魔法可以让您通过创建权限来应用访问控制,请分享。这里讨论了通配符权限:grails.org/plugin/shiro 请注意,尽管通配符权限可能看起来类似于您在 MVC 中习惯使用的 controller:action:id 布局,但在使用 grails shiro 时这两者之间没有关系插件。 嗨 Brandon:我知道 SecurityFilters 是必需的,但我不想写几个。只有一个,并处理来自用户和角色表的其余权限。 我确实认为您的回答是有效的:-)

以上是关于使用 Shiro 插件保护 Grails 应用程序中的一些页面,但不是所有页面的主要内容,如果未能解决你的问题,请参考以下文章

如何保护 Grails 中的所有 REST 请求和响应

如何在我的项目中实现 Grails 的 Shiro 安全性

使用 Spring Security Rest 插件保护 Grails Rest Api

如何在grails shiro中使用缓存权限

如何在 grails shiro 中使用缓存权限

使用 grails spring security core 插件保护 URL 映射