0

コントローラーの 1 つから新しいユーザーを作成する際に問題が発生しています。このように、MongoDB ユーザー コレクションに新しいユーザーを追加しようとしています。権限は、ドメイン内のロールのセットとして定義されます。

Role role = new Role(authority:"ROLE_USER")
User user = new User(username:params.username,email:params.email,password:params.password,enabled:params.enabled,
            accountExpired:params.accountExpired,accountLocked:params.accountLocked,passwordExpired:params.passwordExpired,
            authorities:[role])

if (user.validate()) {
        user.save(flush:true)
      } else {
        user.errors.allErrors.each { println it }
      }

まったく同じコードでブートストラップからユーザーを正常に作成できますが、単純なコントローラーから同じことをしようとすると、次のエラーが発生します。

2012-09-24 10:43:27,450 [http-8080-3] ERROR binding.GrailsDataBinder  - Unable to auto-create type interface java.util.Set, class java.lang.InstantiationException thrown in constructor

a:662)

4

1 に答える 1

0

問題はデータバインディングにあるようです。最初に権限を持つユーザーを作成し、次に UserRole ドメインを使用してロールを追加する必要があります。何かのようなもの:

Role role = Role.findByAuthority("ROLE_USER")
User user = new User(username:params.username,email:params.email,password:params.password,enabled:params.enabled,     accountExpired:params.accountExpired,accountLocked:params.accountLocked,passwordExpired:params.passwordExpired)
new UserRole(user: user, role: role).save(flush: flush, insert: true)
user.save(flush:true)

Spring Securityを使用してユーザーを作成する方法の詳細については、Spring Security UIを参照してください。

于 2012-09-24T10:04:56.053 に答える