1. 程式人生 > >建立口令編解碼器(Codec)

建立口令編解碼器(Codec)

編解碼器(Codec)(編碼器-解碼器的縮寫)是轉換字串的一種方法。Grails提供了大量便捷的編解碼器,而且已經超程式設計到了所有字串例項上。
例如:
"<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
}
}

當建立使用者時會看到密碼已經不是明文的了。