2012-11-19 55 views
1

來到我開始接觸Grails和我正在關注的電子書相關的發現here哪裏encodeAsSHA()函數

書關於認證的第9章以及如何加密密碼任教。下面顯示了它是如何完成的,但我不明白它是如何工作的。

首先,我們需要在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() 
     } 
} 

然後在我的User domain,我需要一個封閉添加到beforeInsert

class User{ 
... 
String password 

def beforeInsert = { 
    password = password.encodeAsSHA() 
    password 
    } 
... 
} 

的代碼工作很好,但我沒有看到關於如何在grails-app/utils/SHACodec.groovy中添加一個類的連接使得使用函數encodeAsSHA()passwordUser domain

由於SHACodec類只分配閉包到encode,並從未提及encodeAsSHA()password(一個String)如何能夠在任何地方使用它?

我肯定失去了一些東西在這裏!

回答

0

一個Grails編解碼器類是一個可能包含一個編碼閉合,解碼閉合或兩者。當Grails應用程序啓動時,Grails框架從grails-app/utils /目錄動態加載編解碼器。

的框架下尋找的grails-app/utils的/該公約編解碼器端的類名稱。例如,Grails附帶的標準編解碼器之一是HTMLCodec。

如果編解碼器包含一個編碼閉合Grails將創建一個動態編碼方法和該方法添加到對象類與表示所定義的編碼封閉編解碼器的名稱。例如,HTMLCodec類定義了一個編碼閉包,因此Grails將其附加名爲encodeAsHTML。