Grails3 spring安全核心3无法使用域对象

Grails3 spring安全核心3无法使用域对象,grails,spring-security,Grails,Spring Security,我正在尝试使用SpringSecurityCore3.0.4创建一个Grails3.1.2网站 我使用过此页面: 我使用了以下脚本(将“网站”替换为我的项目名称): 然后,我在BootStrap.groovy中添加了以下内容: if(User.count()==0) { Date testDate = new Date() Role userRole = new Role('ROLE_USER').save() Role adminRole =

我正在尝试使用SpringSecurityCore3.0.4创建一个Grails3.1.2网站

我使用过此页面:

我使用了以下脚本(将“网站”替换为我的项目名称):

然后,我在BootStrap.groovy中添加了以下内容:

if(User.count()==0) {
        Date testDate = new Date()

        Role userRole = new Role('ROLE_USER').save()
        Role adminRole = new Role('ROLE_ADMIN').save()

        User user = new User("John","password").save()
        User admin = new User("Richard","password").save()

        UserRole.create(admin, adminRole)
        UserRole.create(user, userRole)

        UserRole.withSession {
            it.flush()
            it.clear()
        }

        assert User.count() == 2
        assert Role.count() == 2
        assert UserRole.count() == 2

    }
我收到一个关于无法找到用户bean类的权限的错误,因此我用这个方法替换了getAuthories方法(因为将它添加到临时列表中不起作用):

Set getAuthorities(){
if(this.id){
返回UserRole.findAllBySecUser(此)*.role
}
否则{
按设置返回[]
}
}
然后我再次尝试构建,并收到一个关于UserRole类的异常

ERROR org.springframework.boot.SpringApplication - Application startup failed
org.codehaus.groovy.runtime.metaclass.MethodSelectionException: Could not find which method <init>() to invoke from this list:
  public com.website.UserRole#<init>(org.springsource.loaded.C)
  public com.website.UserRole#<init>(com.website.User, com.website.Role)
    at groovy.lang.MetaClassImpl.chooseMethodInternal(MetaClassImpl.java:3197) ~[groovy-2.4.6.jar:2.4.6]
    at groovy.lang.MetaClassImpl.chooseMethod(MetaClassImpl.java:3134) ~[groovy-2.4.6.jar:2.4.6]
    at groovy.lang.MetaClassImpl.createConstructorSite(MetaClassImpl.java:3434) ~[groovy-2.4.6.jar:2.4.6]
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.createCallConstructorSite(CallSiteArray.java:91) [groovy-2.4.6.jar:2.4.6]
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallConstructor(CallSiteArray.java:60) [groovy-2.4.6.jar:2.4.6]
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:235) [groovy-2.4.6.jar:2.4.6]
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:247) [groovy-2.4.6.jar:2.4.6]
    at com.website.UserRole.create(UserRole.groovy:55) ~[main/:na]
错误org.springframework.boot.SpringApplication-应用程序启动失败
org.codehaus.groovy.runtime.metaclass.MethodSelectionException:无法从该列表中找到要调用的方法():
public com.website.UserRole#(org.springsource.loaded.C)
公共com.website.UserRole#(com.website.User,com.website.Role)
在groovy.lang.MetaClassImpl.chooseMethodInternal(MetaClassImpl.java:3197)~[groovy-2.4.6.jar:2.4.6]
在groovy.lang.MetaClassImpl.chooseMethod(MetaClassImpl.java:3134)~[groovy-2.4.6.jar:2.4.6]
在groovy.lang.MetaClassImpl.createConstructorSite(MetaClassImpl.java:3434)~[groovy-2.4.6.jar:2.4.6]
在org.codehaus.groovy.runtime.callsite.CallSiteArray.createCallConstructorSite(CallSiteArray.java:91)[groovy-2.4.6.jar:2.4.6]
在org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallConstructor(CallSiteArray.java:60)[groovy-2.4.6.jar:2.4.6]
位于org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:235)[groovy-2.4.6.jar:2.4.6]
在org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:247)[groovy-2.4.6.jar:2.4.6]
在com.website.UserRole.create(UserRole.groovy:55)~[main/:na]

我怎样才能克服他的错误呢?我不知道这个特定的错误是什么意思:/

看起来用户有验证错误,没有保存。您正在使用2-arg构造函数,但如果所需的属性多于用户名和密码,则验证将失败,
save()
将返回null

如果更改代码以创建用户,则

User user = new User(..., ...)
user.save()
if (user.hasErrors()) {
    println user.errors
}
然后你就会知道出了什么问题。在构造函数调用后添加缺少的属性:

User user = new User(..., ...)
user.fullName = '...'
或者切换到传统的映射构造函数,在一行中对其进行初始化:

User user = new User(username: ..., password: ..., fullName: ...)
User user = new User(..., ...)
user.fullName = '...'
User user = new User(username: ..., password: ..., fullName: ...)