首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在我的项目中实现Grails的Shiro安全

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

Stack Overflow用户
提问于 2011-04-28 15:54:11
回答 1查看 2.8K关注 0票数 5

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

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

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

等待一些积极的回应:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-29 14:51:35

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

代码语言:javascript
运行
复制
grails create-app ShiroDemo

现在,通过将其添加到BuildConfig.groovy的插件部分来安装shiroby:

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

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

代码语言:javascript
运行
复制
grails create-auth-controller
grails create-wildcard-realm

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

代码语言:javascript
运行
复制
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类:

代码语言:javascript
运行
复制
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() 
            } 
        } 
    } 
}

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

现在试一试,运行你的项目:

代码语言:javascript
运行
复制
grails run-app

希望这能有所帮助!

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5815401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档