【问题标题】:grails 3 spring security User domain id field syntheticgrails 3 spring security 用户域 id 字段合成
【发布时间】:2017-10-09 16:31:34
【问题描述】:

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

我已经运行了 s2-quickstart 脚本来创建用户、角色和用户角色域类。我发现 User 和 Role 域中的 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 字段时,它会失败并出现未知列错误。

【问题讨论】:

    标签: grails spring-security grails-orm grails3


    【解决方案1】:

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

    abstract class BaseDomain {...
    

    【讨论】:

      猜你喜欢
      • 2015-04-10
      • 2013-11-29
      • 2011-11-20
      • 2014-11-20
      • 2023-03-24
      • 2019-04-24
      • 2012-09-15
      • 2016-08-20
      • 2014-09-04
      相关资源
      最近更新 更多