gpt4 book ai didi

Grails3 spring security core 3不能使用域对象

转载 作者:行者123 更新时间:2023-12-01 13:45:56 24 4
gpt4 key购买 nike

我正在尝试使用 spring security core 3.0.4 创建一个 grails 3.1.2 网站。

我用过这个页面: Grails Spring Security Core

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

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 中:

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

}

我收到关于无法找到 User bean 类的权限的错误,所以我用这个替换了 getAuthorities 方法(因为将它添加到临时列表不起作用):

Set<Role> getAuthorities() {
if(this.id){
return UserRole.findAllBySecUser(this)*.role
}
else{
return [] as Set
}
}

然后我再次尝试构建,并收到有关 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]

我如何克服他的错误?我不知道这个特定错误是什么意思:/

最佳答案

看起来用户有一个验证错误并且没有保存。您正在使用 2-arg 构造函数,但如果需要的属性不仅仅是用户名和密码,验证将失败并且 save() 将返回 null。

如果更改代码以创建用户

User user = new User(..., ...)
user.save()
if (user.hasErrors()) {
println user.errors
}

然后你就会看到哪里出了问题。在构造函数调用后添加缺少的属性:

User user = new User(..., ...)
user.fullName = '...'

或者切换到传统的 Map 构造函数来在一行中对其进行初始化:

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

关于Grails3 spring security core 3不能使用域对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36214540/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com