0

我从我的一个控制器创建新用户时遇到了一些问题。我正在尝试像这样将新用户添加到我的 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

一个: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 回答