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

如何在我的项目中实现Grails的Shiro安全性,grails,shiro,Grails,Shiro,我是Grails新手,使用了一些Shiro安全性。 我用登录页面创建了一个小站点,如果登录成功,它会将我重定向到另一个登录页面 现在我想实现Shiro安全性。我已经在新的Grails项目上运行了Shiro的插件和快速启动应用程序 我想要实现的是,如何使用快速启动文件和代码在自己的页面上实现安全性。请导游。一点。我应该从快速入门中使用哪些文件,我应该做哪些更改 等待一些积极的回应:)让我们先从一个新的应用程序开始: grails create-app ShiroDemo 现在安装shiroby,

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

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

我想要实现的是,如何使用快速启动文件和代码在自己的页面上实现安全性。请导游。一点。我应该从快速入门中使用哪些文件,我应该做哪些更改


等待一些积极的回应:)

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

grails create-app ShiroDemo
现在安装shiroby,将其添加到BuildConfig.groovy的plugins部分:

插件{ 编译“: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插件页面上找到关于如何指定权限的详细说明: 您必须为应用程序的其余功能添加更多权限。 您还可以将这些权限直接添加到用户-有时对测试有用,或者如果您不想为某些特殊内容设置新角色

顺便说一句:请确保使用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

希望有帮助

亲爱的拉尔夫。当然,我们需要添加用户和角色域类。。您可以在用户和角色域的内容中进行编辑吗。请……)还有,我们应该使用命令grailsgenerateviews创建视图吗?这个例子是完整的和有效的-ShiroRole和ShiroUser是由上面的语句生成的!亲爱的拉尔夫,你们这些古丁真是太棒了。。现在我希望我已经有了用户和角色类以及一个索引页。(视图)。我有一个名为UserController的控制器,有操作登录和注销。现在,我如何将这种安全性应用到代码中?如果需要管理用户,可以通过标准grails机制(generate all)为ShiroUser和ShiroRole创建视图和控制器。如果希望使用自己的AuthController,只需查看自动生成的AuthController,复制并粘贴登录和注销代码即可。不幸的是,登录页面的位置似乎是硬编码的。因此,每当系统需要重定向到登录页面时,它都会重定向到/auth/login——您可以使用UrlMappings将其重定向到您自己的控制器