Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选

首页 / 软件开发 / JAVA / 精通Grails: 身份验证和授权

精通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")
}
}