grails与spring security可以';在引导中创建默认用户

grails与spring security可以';在引导中创建默认用户,grails,spring-security,gorm,grails-plugin,Grails,Spring Security,Gorm,Grails Plugin,我正在使用Grails和Spring安全插件,希望在应用程序启动时创建默认用户 我有默认的用户和权限类 我的BootStrap.groovy如下所示: class BootStrap { def init = { servletContext -> def userAuthority = Authority.findByAuthority('ROLE_USER') ?: new Authority(authority: 'ROLE_USER').save(flush: true)

我正在使用Grails和Spring安全插件,希望在应用程序启动时创建默认用户

我有默认的
用户
权限

我的
BootStrap.groovy
如下所示:

class BootStrap {

def init = { servletContext ->
    def userAuthority = Authority.findByAuthority('ROLE_USER') ?: new Authority(authority: 'ROLE_USER').save(flush: true)
    def adminAuthority = Authority.findByAuthority('ROLE_ADMIN') ?: new Authority(authority: 'ROLE_ADMIN').save(flush: true)
    def defaultUser = new User(username: "admin", password: "password", accountExpired: false, accountLocked: false,
            passwordExpired: false, enabled: true).save(flush: true)

    assert defaultUser != null

    if (!defaultUser.getAuthorities().contains(userAuthority)) {
        UserAuthority.create defaultUser , userAuthority, true
    }


    if (!defaultUser.getAuthorities().contains(adminAuthority)) {
        UserAuthority.create defaultUser , adminAuthority, true
    }

    assert User.count() == 1
    assert Authority.count() == 2
    assert UserAuthority.count() == 2
}
def destroy = {}
}
当我启动应用程序时,它会给我一个异常并失败:

Error initializing the application: Cannot invoke method getAuthorities() on null object
因此,出于某种原因,它不会创建用户实例(不知道为什么)。 我正在使用默认的内存H2数据库


可能是什么?我非常感谢您的帮助,因为我已经花了几个小时来解决这个问题:(

您应该会遇到验证失败。添加
println“errors->$defaultUser.errors”
以进行检查,非常感谢!:-(我没有注意到,实际上User不是默认值,而是有一个表示到其他classI的一对多映射的附加字段,通常在
Config.groovy
中设置
grails.gorm.failOnError=true
,以便首先捕获验证错误并避免
if(!domainInstance.save())
statement适用于一次性情况,如REST-API,在这种情况下,您只需发出信号,表示由于某种原因无法创建对象。虽然对于正常的用户界面,您需要显示您的输入到底出了什么问题。在后一种情况下,
failOnError
是否存在不被用户接受的DBde>和
角色
作为表名。例如,Postgres(可能还有H2)有这个问题。因此,最好重命名该安全域。