在不扩展GrailsUser的情况下向用户类添加自定义字段

在不扩展GrailsUser的情况下向用户类添加自定义字段,grails,spring-security,custom-fields,Grails,Spring Security,Custom Fields,我正在使用spring安全性,希望向我的用户类中添加自定义字段。据我所知,唯一的方法是扩展GrailUser,但我不能这样做,因为我的类必须扩展另一个域类。 这是我的用户类: class User extends BasicDomain { transient springSecurityService; ..... } 我想添加一个字段,有人知道怎么做吗? 谢谢。用谷歌搜索以下内容 grails.plugins.springsecurity.userLook

我正在使用spring安全性,希望向我的用户类中添加自定义字段。据我所知,唯一的方法是扩展GrailUser,但我不能这样做,因为我的类必须扩展另一个域类。 这是我的用户类:

    class User extends BasicDomain {
    transient springSecurityService;
     .....
    }
我想添加一个字段,有人知道怎么做吗?
谢谢。

用谷歌搜索以下内容

grails.plugins.springsecurity.userLookup.userDomainClassName 
您可以在config.groovy中定义它,如下所示

grails.plugins.springsecurity.userLookup.userDomainClassName = 'com.company.security.User'
grails.plugins.springsecurity.userLookup.authorityJoinClassName = 'com.company.security.UserRole'
grails.plugins.springsecurity.authority.className = 'com.company.security.Role'
并创建自己的标记库

import com.company.security.User

class SecurityTagLib {
    def springSecurityService

    static namespace = "mySec"

    def nickName = { attrs ->
        def user = springSecurityService.currentUser as User
        out << "${user.nickName}"
    }

}
导入com.company.security.User
类SecurityTagLib{
def springSecurityService
静态名称空间=“mySec”
def昵称={attrs->
def user=springSecurityService.currentUser作为用户

out我无法决定这是一个优雅的解决方案还是一个彻底的坏主意,但它对我很有用

如果您查看SecurityTagLib源代码,我将其解释为“如果我们处理的是UserDetails对象,请使用域类(您设置为grails.plugin.springsecurity.userLookup.userDomainClassName)来获取字段的值

除了检查我们是否使用默认UserDetails的测试是“它是否有一个名为getDomainClass的方法?”而当前的实现没有

我的解决方案是在BootStrap.groovy中提供一个。我的用户对象域类称为user,用户名是唯一的:

GrailsUser.metaClass.getDomainClass = { ->
  User.withTransaction { status ->
    return User.findByUsername(delegate.username)
  }
}

我已经这样做了,我的类被识别了,但是没有我添加的字段。当我尝试获取它们时,我得到了一个错误。这是获取字段的代码:${sec.loggedInUserInfo(字段:“”)}。这段代码是可以的,因为它是一个内置字段:${sec.loggedInUserInfo(字段:“username”)},但是下一行导致了一个错误,因为它是我添加的字段:${sec.loggedInUserInfo(field:“someField”)}这是错误:由缺少PropertyException引起:没有这样的属性:类的昵称:org.codehaus.groovy.grails.plugins.springsecurity.GrailsUserYes它正在查找“org.codehaus.groovy.grails.plugins.springsecurity.GrailsUser”“calss。您可以创建类似以下内容的标记库:import com.yourCompany.security.User class SecurityTagLib{def springSecurityService static namespace=“mySec”def昵称={attrs->def user=springSecurityService.currentUser as user out你能不能把它写下来作为一个答案,这样我就可以清楚地看到代码了?谢谢,谢谢。我会试试的,告诉你它是否有效。