快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
f(session.user){     out << "Hello ${session.user.name} "     out << """[${link(action:"logout", controller:"user"){"Logout"}}]"""    } else {     out << """[${link(action:"login", controller:"user"){"Login"}}]"""    }   } }

现在,将新的 <g:loginControl> 标记添加到 grails-app/views/layouts/_header.gsp,如清 单 5 所示:

清单 5. 将 <loginControl> 标记添加到标题

<div id="header">   <p><g:link class="header-main"  controller="entry">Blogito</g:link></p>   <p class="header-sub">A tiny little blog</p>   <div id="loginHeader">    <g:loginControl />   </div> </div>

最后,将针对 loginHeader <div> 的一些 CSS 格式添加到 web-app/css/main.css,如清单 6 所示:

清单 6. loginHeader <div> 的 CSS 格式

#loginHeader {   float: right;   color: #fff; }

重启 Grails 并以 jsmith 身份登录后,屏幕应该如图 3 所示:

图 3. 实际使用 Login TagLib

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

时间:2011-08-02 IBM Scott Davis

基本授权

现在 Blogito 已经实现了身份验证,接下来是限制您所能执行的操作。例如,任何人都应当能够读取 Entry,但是只有登录用户能够创建、更新和删除 Entry。要达到这个目的,Grails 提供了一个 beforeInterceptor,顾名思义,它为您提供一个钩子,可以在调用目标闭包之前对行为进行授权。

将清单 7 中的代码添加到 EntryController:

清单 7. 向 EntryController 添加授权

class EntryController {   def beforeInterceptor = [action:this.&auth, except:["index", "list",  "show"]]   def auth() {    if(!session.user) {     redirect(controller:"user", action:"login")     return false    }   }   def list = {    //snip...   } }

auth 和 list 之间微妙但重要的一点区别是 list 是一个闭包,而 auth 是一个私有方法(闭包在定 义中使用等号;方法使用圆括号)。闭包以 URI 的形式被公开给最终用户;方法则无法从浏览器中进行 访问。

auth 方法将执行检查,查看某个 User 是否在会话中。如果不在的话,它将重定向到登录屏幕并返回 false,阻塞初始的闭包调用。

在 beforeInterceptor 调用每个闭包之前,auth 方法将得到调用。该操作使用 Groovy 标记来指向 this 类的 auth 方法,该方法使用了 ampersand(&)字符。except 列表包含了应当从 auth 调用 中移除的闭包。如果希望拦截一些闭包调用,可以使用 only 替换 except。

重新启动 Grails 并测试 beforeInterceptor。尝试在未登录的情况下访问 http://localhost:9090/blogito/entry/create。您应当被重定向到登录屏幕。以 jsmith 身份登录并重 新尝试。这一次您应当能够成功创建新的 Entry。

细粒度授权

beforeInterceptor 提供的粗粒度授权仅仅是个开始,但是也可以向单独的闭包添加授权钩子。例如 ,任何已登录的 User(不仅仅是初始创建者)都可以编辑任何 Entry。可以关闭安全漏洞:将 4 行良好 布置的代码添加到 EntryController.groovy 中的 edit 闭包中,如清单 8 所示:

清单 8. 向 edit 闭包添加授权

def edit = 

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号