编解码器(Codec)(编码器-解码器的缩写)是转换字符串的一种方法。Grails提供了大量便捷的编解码器,而且已经元编程到了所有字符串实例上。
例如:
1.创建编解码器完成口令的加密
grails-app/utils/SHACodec.groovy
2.使用,给User.groovy增加beforeInsert闭包
当创建用户时会看到密码已经不是明文的了。
例如:
"<p>Hello</p>".encodeAsHTML()返回<p>Hello</p>
"You&Me".encodeAsURL()返回You+%26+Me
"ABC123".encodeAsBase64()返回QUJDMTlz
相应的还有decodeAsHTML()、decodeAsURL()、decodeAsBase64()方法完成以上转换的逆操作。
1.创建编解码器完成口令的加密
grails-app/utils/SHACodec.groovy
import java.security.MessageDigest;
class SHACodec {
static encode={
target->
MessageDigest md=MessageDigest.getInstance("SHA")
md.update(target.getBytes('UTF-8'))
return new String(md.digest()).encodeAsBase64()
}
}
2.使用,给User.groovy增加beforeInsert闭包
package com.rt
class User {
String login
String password
String role='user'
static constraints = {
login(blank:false,nullable:false,unique:true)
password(blank:false,password:true)
role(inList:['admin','user'])
}
/**
* 增加了isAdmin方法,GORM会到数据库找admin字段,但这个字段不存在
* 那就创建一个static transients列表,把admin加进去
* transients列表特别指明了那些不应该保存回数据库的字段
**/
static transients=['admin']
boolean isAdmin(){
return role=='admin'
}
def beforeInsert={
password=password.encodeAsSHA()
}
@Override
public String toString() {
login
}
}
当创建用户时会看到密码已经不是明文的了。