2

spring security と dynamodb を使用してユーザーを grails アプリケーションにログインできません。

Grails は 2.1 で、インストールされているプラ​​グインは spring-security コアと dynamodb の最新のものです。

ユーザーとロールは s2-quickstart によって作成され、その唯一の変更は、文字列 ID と静的 mapWith = "dynamodb" をユーザー、ロール、およびユーザーロール クラスに追加することです (dynamodb の ID は UUID によって生成されるため、文字列 ID が必要です)。

Bootstrap は、春のセキュリティ チュートリアルのとおりです。

アプリケーションが正常に起動し、dynamodb テーブルと行が作成されます。

私は取得し続けます

認証に失敗しました: パスワードが保存された値と一致しません

LoginController にログインします (チュートリアルのサンプル コントローラーは設定しませんでした)。何か案は?

4

1 に答える 1

0

複数のデータ ソースが構成されている場合は、mapWith を使用しているため、 beforeUpdate ブロックが複数回呼び出されると推測されます。(データ ソースごとに 1 回) 以下をユーザー ドメイン オブジェクトに追加したところ、正しく動作しました。

transient hasBeforeInsert = false
transient hasBeforeUpdate = false

...

  def beforeInsert()
  {
    if(!hasBeforeInsert)
    {
      hasBeforeInsert = true
      encodePassword()
    }
  }

  def beforeUpdate()
  {
    if(!hasBeforeUpdate)
    {
      hasBeforeUpdate = true

      if(isDirty('password'))
      {
        encodePassword()
      }
    }
于 2012-08-27T17:49:21.850 に答える