使用 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 应用程序中的一些页面,但不是所有页面的主要内容,如果未能解决你的问题,请参考以下文章