1

私は Grails から始めて、ここにある InfoQ 電子ブックに従っています

この本では、第 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(a )はどこからともなくそれをどのStringように使用できますか?

私は確かにここに何かが欠けています!

4

1 に答える 1

0

Grails コーデック クラスは、encode クロージャ、decode クロージャ、またはその両方を含むクラスです。Grails アプリケーションが起動すると、Grails フレームワークはコーデックを grails-app/utils/ ディレクトリから動的にロードします。

フレームワークは grails-app/utils/ の下で、慣習的な Codec で終わるクラス名を探します。たとえば、Grails に同梱されている標準コーデックの 1 つに HTMLCodec があります。

コーデックに encode クロージャが含まれている場合、Grails は動的な encode メソッドを作成し、そのメソッドを Object クラスに追加し、encode クロージャを定義したコーデックを表す名前を付けます。たとえば、HTMLCodec クラスは encode クロージャを定義するため、Grails はこれを encodeAsHTML という名前でアタッチします。

于 2013-02-20T12:37:49.723 に答える