0

我们有以下域类继承策略。

  • AbstractDomain(包含默认属性)
  • 用户扩展 AbstractDomain
  • 运算符扩展用户

在 AbstractDomain 中,我们使用方法创建了实现 beforeUpdate 和 beforeInsert 的方法,因此我们可以在扩展类上扩展它们

抽象领域

abstract class AbstractDomain {
    protected void onBeforeInsert() {
    ...
    }

    protected void onBeforeUpdate() {
    ...
    }

    def beforeInsert() {
        onBeforeInsert()
    }

    def beforeUpdate() {
        onBeforeUpdate()
    }
}

在用户类中,我们有这样加密用户密码的逻辑..

用户

public class User extends AbstractDomain {
    @Override
    protected void onBeforeUpdate() {
        super.onBeforeUpdate()
        if (isDirty('password')) {
            encodePassword()
        }
    }

    protected void encodePassword() {
        println "encoding password!!!!"
        if (springSecurityService) { // added the if clause to ensure
that tests work correct!
            password = springSecurityService.encodePassword(password)
        }
    }
}

操作员

public class Operator extends User {
// code omitted
}

因此,当我尝试更新操作员时,会看到消息“编码密码!!!!” 该属性已设置,但是当我检查数据库时,密码仍然是明文。我所做的更改似乎没有效果并且似乎没有被持久化。

任何线索我可能会错过什么?

4

1 回答 1

0

看代码……如果看到“编码密码!!!” 文本,但密码未编码,则 springSecurityService 属性未设置,或者 encodePassword 函数无法工作......这与继承无关。我会把你的 println 移到 if 里面,因为这样更准确。

于 2012-09-25T20:36:31.497 回答