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

标签 grails shiro

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

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

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

等待一些积极的回应:)

最佳答案

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

grails create-app ShiroDemo

现在安装 shiroby,将其添加到 BuildConfig.groovy 的 plugins 部分:

插件{
编译 ":shiro:1.1.4"
}

我们需要身份验证 Controller 和通配符领域:
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线。您可以在此处授予 Controller 和操作的权限。如果角色缺少权限,用户将被重定向到访问被拒绝页面。你会在 shiro 插件页面上找到关于如何指定权限的很好的描述:http://www.grails.org/plugin/shiro
您必须为应用程序的其余功能添加更多权限。
您也可以将这些权限直接添加到用户 - 有时对于测试或如果您不想为特殊内容设置新角色很有用。

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

我们要做的最后一件事是创建 /conf/SecurityFilters.groovy类(class):
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() 
            } 
        } 
    } 
}

这将为所有 Controller 安装访问控制,但不会安装直接 View (我们的索引页面)。

现在试一试并运行你的项目:
grails run-app

希望有帮助!

关于grails - 如何在我的项目中实现 Grails 的 Shiro 安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5815401/

相关文章:

java - Grails-在 Controller 中实现自动完成请求的反跳算法

java - 带有 jdbc 和散列密码的 shiro

ldap - Shiro JndiLdapRealm 针对 LDAP 的授权

Grails:将堆栈跟踪记录到标准输出

grails - rest-api插件和缺少gson View 的问题

grails - Grails事件:在构建时复制目录以获得干净的 'multi-tenant'部署效果

java - 如何配置用于 Jersey REST 调用的最大并发线程数?

authorization - 可以使用 Apache Shiro 保护 EJB 吗?

java - 如何使用 Shiro SSO

Grails 在 bcrypt 上苦苦挣扎