快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15

精通Grails: 身份验证和授权

时间:2011-08-02 IBM Scott Davis

在本文中,我将继续构建一个“微型博客” Blogito。我删除了此前文章(“用定制 URI 和 codec 优化 Grails 中的 URI”)中的 User,因为 name 字段是 URI 的重要组成部分。这一次我们将实现完整 的 User 子系统。您将理解到如何根据 User 是否登录启用登录、限制用户行为,甚至根据 User 的角色 添加一些授权。

首先,User 需要一种登录方式,从而能够发布新的条目。

身份验证

对于支持多个用户的博客服务器来说,进行身份验证是个好主意。您肯定不希望 John Doe 以 Jane Smith 的身份发布博客条目,不管是有意还是无意。设置身份验证基础设施将回答这个问题:“您是谁? ”,稍后,您还将添加一些授权机制。授权将回答关于 “允许您做什么” 的问题。

清单 1 展示了您在 在上一篇文章 中创建的 grails-app/domain/User.groovy 文件:

清单 1. User 类

class User {   static constraints = {    login(unique:true)    password(password:true)    name()   }   static hasMany = [entries:Entry]   String login   String password   String name   String toString(){    name   } }

login 和 password 字段已经就绪。您现在只需要提供一个控制器和一个表单。创建 grails- app/controllers/UserController.groovy 并添加如清单 2 所示的代码:

清单 2. 将 login、authenticate 和 logout 闭包添加到 UserController

class UserController {   def scaffold = User   def login = {}   def authenticate = {    def user = User.findByLoginAndPassword(params.login, params.password)    if(user){     session.user = user     flash.message = "Hello ${user.name}!"     redirect(controller:"entry", action:"list")    }else{     flash.message = "Sorry, ${params.login}. Please try again."     redirect(action:"login")    }   }   def logout = {    flash.message = "Goodbye ${session.user.name}"    session.user = null    redirect(controller:"entry", action:"list")   } }

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

时间:2011-08-02 IBM Scott Davis

空的 login 闭包仅仅表示在您的浏览器中访问 http://localhost:9090/blogito/user/login 将呈现 grails-app/views/user/login.gsp 文件(您稍后即将创建该文件)。

authenticate 闭包使用了一个方便的 GORM 方法(findByLoginAndPassword() )执行需要的操作: 在数据库中查找 User,该 User 的 login 和 password 匹配表单字段中输入的值,并通过 params hashmap 使用户可用。如果 User 存在的话,将它添加到会话中。如果不存在的话,重定向回登录表单以 允许 User 再一次提供正确的凭证。logout 闭包将执行 User 退出,将他或她从会话中删除,然后重定 向回 EntryController 中的 list 操作。

现在让我们开始创建 login.gsp。可以手动输入清单 3 中所示的代码,或者可以执行下面的操作:

在命令行输入 grails generate-views User。

将 create.gsp 复制到 login.gsp。

简化生成的代码。

清单 3. login.gsp

<html>   <head>    <meta name="layout" content="main" />    <title>Login</title>   </head>   <body>    <div class="body&

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