首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Grails3 spring安全核心3不能使用域对象

Grails3 spring安全核心3不能使用域对象
EN

Stack Overflow用户
提问于 2016-03-25 05:27:52
回答 1查看 350关注 0票数 3

我正在尝试创建一个带有spring安全核心3.0.4的grails3.1.2网站。

我使用过以下页面:Grails弹簧安全核心

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

代码语言:javascript
运行
复制
grails s2-quickstart com.website User Role
grails s2-create-persistent-token com.website.PersistentLogin
grails s2-create-role-hierarchy-entry com.website.RoleHierarchyEntry

然后,我将以下内容添加到我的BootStrap.groovy中:

代码语言:javascript
运行
复制
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类权限的错误,因此我用以下方法替换了getAuthorities方法(因为将它添加到瞬态列表中不起作用):

代码语言:javascript
运行
复制
Set<Role> getAuthorities() {
    if(this.id){
        return UserRole.findAllBySecUser(this)*.role
    }
    else{
        return [] as Set
    }
}

然后,我再次尝试构建,并收到一个关于UserRole类的异常。

代码语言:javascript
运行
复制
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]

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-25 08:30:38

它看起来像一个用户有一个验证错误,没有保存。您使用的是2-arg构造函数,但是如果有比用户名和密码更多的必需属性,验证将失败,save()将返回null。

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

代码语言:javascript
运行
复制
User user = new User(..., ...)
user.save()
if (user.hasErrors()) {
    println user.errors
}

然后你就会发现出了什么问题。在构造函数调用后添加缺少的属性:

代码语言:javascript
运行
复制
User user = new User(..., ...)
user.fullName = '...'

或者切换到传统的Map构造函数,在一行中初始化它:

代码语言:javascript
运行
复制
User user = new User(username: ..., password: ..., fullName: ...)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36214540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档