grails 3 spring security用户域id字段合成

时间:2017-05-10 20:43:29

标签: grails spring-security gorm grails3

我使用带有spring-security-core插件3.1.2的grails 3.2.9。

我已经运行了s2-quickstart脚本来创建User,Role和UserRole域类。我发现用户域和角色域中的id字段被认为是合成的。例如,如果我运行以下代码,则不会显示id字段:

def u = User.class.declaredFields.findAll {!it.synthetic}
u.each {
    println it
}

这是我的用户类:

@GrailsCompileStatic
@EqualsAndHashCode(includes='username')
@ToString(includes='username', includeNames=true, includePackage=false)
class User extends BaseDomain implements Serializable {

    private static final long serialVersionUID = 1

    String username
    String password
    boolean enabled = true
    boolean accountExpired
    boolean accountLocked
    boolean passwordExpired
    Date lastLogin

    Set<Role> getAuthorities() {
        (UserRole.findAllByUser(this) as List<UserRole>)*.role as Set<Role>
    }

    static constraints = {
        password blank: false, password: true
        username blank: false, unique: true
    }

    static mapping = {
        id generator: 'identity', column: 'user_id', sqlType: 'bigint(20) unsigned'
        password column: '`password`'
        lastLogin sqlType: 'timestamp'
    }
}

我的其他域类没有发生这种情况,我看到的第一个问题是exa-datatables插件(2.0.1)。该插件使用类似的代码来查找域的字段,因此当请求插件显示的id字段时,它会因未知的列错误而失败。

1 个答案:

答案 0 :(得分:0)

我发现这是因为我正在扩展一个类(示例中的BaseDomain),而我没有将BaseDomain标记为抽象。一旦我将BaseDomain限定为抽象,一切都按预期开始工作。

abstract class BaseDomain {...