快速业务通道

精通Grails: 身份验证和授权 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
"production":     break    }   }   def destroy = {   } }

最后,添加清单 11 中的代码,将所有 User 帐户活动限制为只有拥有 admin 角色的人员才能执行:

清单 11. 将 User 帐户管理限制为只有拥有 admin 角色的人员才能执行

class  UserController {   def beforeInterceptor = [action:this.&auth,                except:["login", "authenticate", "logout"]]   def auth() {    if( !(session?.user?.role == "admin") ){     flash.message = "You must be an administrator to perform that task."     redirect(action:"login")     return false    }   }   //snip... }

精通Grails: 身份验证和授权(8)

时间:2011-08-02 IBM Scott Davis

要测试基于角色的授权,以 jsmith 身份登录并随后尝试访问 http://localhost:9090/blogito/user/create。应当被重定向到登录屏幕,如图 5 所示:

图 5. 阻塞非管理员访问

现在以 admin 用户的身份登录。应当能够访问所有的闭包。

使用插件实现更高级功能

这个 “微型” 博客应用程序的 “微型” 身份验证和授权系统现在已经初具雏形。您可以轻松地对 它进行扩展。也许您希望 User 能够管理他们各自的帐户,而不是其他人的。也许 admin 应当具备编辑 所有 Entries 的能力,而不仅仅是编辑他们自己的。在这些情况下,只需要策略性地放置几行代码就可 以添加新的功能。

人们常常将简洁性误解为缺乏功能。Blogito 仍然不足 200 行代码 — 并且这还包含了单元和集成测 试。在命令行输入 grails stats 以确认这点。结果如清单 12 所示。但是 Blogito 不复杂并不表示它 的功能不完备。

清单 12. “微型” 应用程序的大小

$ grails stats   +----------------------+-------+-------+   | Name         | Files | LOC |   +----------------------+-------+-------+   | Controllers     |   2 |  95 |   | Domain Classes    |   2 |  32 |   | Tag Libraries    |   2 |  21 |   | Unit Tests      |   5 |  20 |   | Integration Tests  |   1 |  10 |   +----------------------+-------+-------+   | Totals        |  12 |  178 |   +----------------------+-------+-------+

精通Grails: 身份验证和授权(9)

时间:2011-08-02 IBM Scott Davis

从本系列的第一篇文章开始,我的目标就是向您展示核心 Grails 与生俱来的强大功能,以及 Groovy 语言的简洁的表达能力。例如,一旦理解了 Grails 的编解码器,就可能打乱数据库中存储的密码,而不 是以简洁的形式显示出来。创建 grails-app/utils/HashCodec.groovy 并添加清单 13 中的代码:

清单 13. 创建一个简单的 HashCodec

import java.security.MessageDigest import sun.misc.BASE64Encoder import sun.misc.CharacterEncoder class HashCodec {   static encode = { str ->    MessageDigest md = MessageDigest.getInstance(''SHA'')    md.update(str.getBytes(''UTF-8''))    return (new BASE64Encoder()).encode(md.digest())   } }

有了 HashCodec 之后,只需要在 UserController 的 login、save 和 update 闭包中将对 User.password 的引用修改为 User.password.encodeAsHash()。令人惊讶的是,只需要 10 行代码,您 让应用程序变得更高级。

但是,有时

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号