在我基于 spring-maven-jpa 的 Web 应用程序中,一些数据必须在存储到数据库之前进行加密,然后在从数据库中汇集时解密回来。
所以我创建了我的加密服务,现在我想知道什么应该是最好的实现。
从 OO POV 来看,我认为每个实体都应该知道自己保护和不保护自己。这导致我将我的加密器注入到一个抽象的基础实体中:
public abstract class BaseEntity {
@Autowired(required = true)
protected SecurityProvider securityService;
public BaseEntity() {
}
/**
* secure the entity (if required) using the securityService
*/
@PrePersist
@PreUpdate
protected abstract void secure();
/**
* un-secure the entity (if required) using the securityService
*/
@PostLoad
protected abstract void unsecure();
/*--- Getters & Setters ---*/
public SecurityProvider getSecurityService() {
return securityService;
}
public void setSecurityService(SecurityProvider securityService) {
this.securityService = securityService;
}
}
如您所见,我试图通过@PrePersist、@PreUpdate 和@PostLoad 回调来实现这一点。
目前我在注入加密器时遇到了一些问题,所以我看不到一路测试。
问题是 - 它看起来像一个好习惯吗?你能提出改进或更好的方法吗?
更新:
在运行了一些测试之后,看起来@PrePersist 和@PreUpdate 注释工作得很好,每个实体在写入数据库之前就被加密了。但是@PostLoad 似乎没有像我预期的那样工作。我认为每次我从数据库中汇集一个实体时它都会运行,但由于某种原因该方法没有被调用。我对@PostLoad 的想法有误吗?