创建口令编解码器(Codec)
编解码器(Codec)(编码器-解码器的缩写)是转换字符串的一种方法。Grails提供了大量便捷的编解码器,而且已经元编程到了所有字符串实例上。例如:
"<p>Hello</p>".encodeAsHTML()返回&lt;p&gt;Hello&lt;/p&gt;"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.rtclass User {String loginString passwordString 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()}@Overridepublic String toString() {login}}
当创建用户时会看到密码已经不是明文的了。
页:
[1]