我有一个grails应用程序 . 我已经安装了spring security core plugin 2.0 RC2,我在BootStrap.groovy中创建角色,用户和请求映射Grails在运行应用程序时抛出以下错误 .
ERROR context.GrailsContextLoader - Error initializing the application: Unknown entity: Role
这是我的Role类(由spring安全插件生成并修改为扩展AbstractActivity,是一个具有beforeInsert()方法/闭包并进行一些验证的抽象类) .
package com.mypackage
class Role extends AbstractDomain {
String authority
Date dateCreated
Date lastUpdated
User createdBy
User updatedBy
static mapping = {
cache true
}
static constraints = {
authority blank: false, unique: true
createdBy nullable: true
updatedBy nullable: true
}
}
AbstractDomain.groovy
package com.mypackage
import com.mypackage.User
class AbstractDomain implements Serializable {
transient springSecurityService
def beforeInsert() {
if(null != springSecurityService) {
User user = springSecurityService.getCurrentUser()
if(null != user) {
this.createdBy = user
}
}
}
}
BootStrap.groovy中
import com.mypackage.Role
class BootStrap {
def init = { servletContext ->
if (Role.findByAuthority('ROLE_ADMIN') == null)
def adminRole = new Role(authority: 'ROLE_ADMIN').save(flush: true)
}
def destroy = {}
}
Config.groovy中
grails.plugin.springsecurity.userLookup.userDomainClassName ='com.mypackage.User'
grails.plugin.springsecurity.userLookup.authorityJoinClassName 'com.mypackage.UserRole'
grails.plugin.springsecurity.authority.className = 'com.mypackage.Role'
grails.plugin.springsecurity.requestMap.className = 'com.mypackage.Requestmap'
grails.plugin.springsecurity.securityConfigType = 'Requestmap'
如何解决未知实体问题?
4 回答
您应该在Config.groovy中进行以下配置,以便让Spring安全插件知道您用于角色持久性的类:
同样适用于用户:
见http://grails-plugins.github.io/grails-spring-security-core/docs/manual/guide/domainClasses.html#authorityClass
尝试更换
同
这似乎不是Spring Security问题 . 错误来自Grails - “未知实体:角色” . 当域类(或其他工件)中的包名与文件所在的文件夹不匹配时,通常会发生这种情况 .
如果希望
Role
类位于com.mypackage
包中,请确保该文件位于grails-app/domain/com/mypackage/Role.groovy
中 . 名称也区分大小写,因此请确保文件夹和软件包名称也同意 . 此外,您可能没有看到人们犯错误,比如创建一个"com.mypackage"目录,将文件放在grails-app/domain/com.mypackage/Role.groovy
中 . 任何这些问题都会导致您看到的不匹配 .我找到了解决方案!我的AbstractDomain类由Role类扩展,位于'src/groovy'文件夹中,我忘了将其设为'abstract' . 然后我在
class
之前添加了abstract
关键字,它就像魔法一样 . 谢谢@mgg给我的想法here所以,我的AbstractDomain类现在看起来像