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

Posted

技术标签:

【中文标题】如何在我的项目中实现 Grails 的 Shiro 安全性【英文标题】:how to implement Shiro Security of Grails in my Project 【发布时间】:2011-08-14 11:55:53 【问题描述】:

我是 Grails 的新手,使用了一些 Shiro 安全性。 我创建了一个带有登录页面的小网站,如果登录成功,它会将我重定向到另一个登录页面。

现在我想实施 Shiro Security。我已经在新的 Grails 项目上运行了 Shiro 的插件和快速启动应用程序。

我想要实现的是如何使用快速启动文件和代码在我自己的页面上实现我的安全性。请指导。一点。我应该从那个快速开始使用哪些文件以及我应该做哪些改变。 ?

等待一些积极的回应:)

【问题讨论】:

【参考方案1】:

让我们先从一个新的应用开始:

grails create-app ShiroDemo

现在安装 shiro,将其添加到 BuildConfig.groovy 的插件部分:

插件 编译“:shiro:1.1.4”

我们需要授权控制器和通配符领域:

grails create-auth-controller
grails create-wildcard-realm

现在让我们在bootstrap.groovy 中创建一个具有所需角色和权限的虚拟用户:

import org.apache.shiro.crypto.hash.Sha256Hash
class BootStrap 
    def init =  servletContext ->
        def roleUser = new ShiroRole(name:'USER')
        roleUser.addToPermissions('auth:*')
        roleUser.addToPermissions('controller:action')
        roleUser.save(flush:true, failOnError: true)
        def testUser = new ShiroUser(username:'kermit',passwordHash:new Sha256Hash("password").toHex())
        testUser.addToRoles(roleUser)
        testUser.save(flush:true, failOnError: true)
    
    def destroy = 
    

看看role.User.addToPermissions 行。在这里,您授予控制器和操作的权限。如果角色缺少权限,用户将被重定向到拒绝访问页面。你会在 shiro 插件页面上找到关于如何指定权限的很好的描述:http://www.grails.org/plugin/shiro 您必须为应用程序的其余功能添加更多权限。 您也可以将这些权限直接添加给用户 - 有时对测试很有用,或者如果您不想为特殊的事情设置新角色。

顺便说一句:确保使用 sha256hash 而不是 sha1hash,后者不适用于当前的 shiro 版本。

我们要做的最后一件事是创建/conf/SecurityFilters.groovy 类:

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

这将为所有控制器安装访问控制,但不是直接视图(我们的索引页面)。

现在试一试并运行您的项目:

grails run-app

希望有帮助!

【讨论】:

亲爱的拉尔夫。当然,为此我们需要添加用户和角色域类..您能否在用户和角色域的内容中进行编辑。请。 :) 还有我们应该使用命令 grails generate-views 创建视图吗? 该示例已完成并且可以正常工作 - ShiroRole 和 ShiroUser 由上述语句生成! 亲爱的 Ralf 你的 Gudings 是完美的 Thnks.. 现在我希望我已经拥有用户和角色类以及索引页面。 (意见)。我有一个名为 UserController 的控制器,并且有登录和注销操作。现在我怎样才能将该安全性应用到该代码中? 如果您需要管理您的用户,您可以通过标准 grails 机制(generate-all)为 ShiroUser 和 ShiroRole 创建视图和控制器。 如果您想使用自己的 AuthController,只需查看自动生成的,复制并粘贴 signIn 和 signOut 代码。不幸的是,登录页面的位置似乎是硬编码的。因此,每当系统需要重定向到登录页面时,它都会重定向到 /auth/login - 您可以使用 UrlMappings 将其重定向到您自己的控制器

以上是关于如何在我的项目中实现 Grails 的 Shiro 安全性的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Grails 中实现超时页面

如何在 grails 中实现表单构建器插件

如何限制grails shiro security中的操作

如何在我的 Vue 项目中实现 Electron 的 webview?

如何在我的 Google App Engine 项目中实现 OpenID 使用者?

如何计算两个图像的相似度百分比,如下图我想在我的项目中实现它