grails 3 spring security 用户域 id 字段合成
grails 3 spring security User domain id field synthetic
我正在使用带有 spring-security-core 插件 3.1.2 的 grails 3.2.9。
我有 运行 s2-quickstart 脚本来创建用户、角色和 UserRole 域 classes。我发现用户和角色域中的 id 字段被认为是合成的。例如,如果我 运行 下面的代码位不显示 id 字段:
def u = User.class.declaredFields.findAll {!it.synthetic}
u.each {
println it
}
这是我的用户 class:
@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'
}
}
我的其他域 classes 没有发生这种情况,我看到的第一个问题是 exa-datatables 插件 (2.0.1)。该插件使用类似的代码来查找域的字段,因此当请求插件显示 id 字段时,它会因未知列错误而失败。
我发现这是因为我正在扩展 class(示例中的 BaseDomain),并且我没有将 BaseDomain 标记为抽象。一旦我将 BaseDomain 限定为抽象,一切都开始按预期工作。
abstract class BaseDomain {...
我正在使用带有 spring-security-core 插件 3.1.2 的 grails 3.2.9。
我有 运行 s2-quickstart 脚本来创建用户、角色和 UserRole 域 classes。我发现用户和角色域中的 id 字段被认为是合成的。例如,如果我 运行 下面的代码位不显示 id 字段:
def u = User.class.declaredFields.findAll {!it.synthetic}
u.each {
println it
}
这是我的用户 class:
@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'
}
}
我的其他域 classes 没有发生这种情况,我看到的第一个问题是 exa-datatables 插件 (2.0.1)。该插件使用类似的代码来查找域的字段,因此当请求插件显示 id 字段时,它会因未知列错误而失败。
我发现这是因为我正在扩展 class(示例中的 BaseDomain),并且我没有将 BaseDomain 标记为抽象。一旦我将 BaseDomain 限定为抽象,一切都开始按预期工作。
abstract class BaseDomain {...