gpt4 book ai didi

java - Spring JPA @Converter - 如何使用它自己的 id 作为盐来加密实体?

转载 作者:行者123 更新时间:2023-12-02 03:01:29 24 4
gpt4 key购买 nike

因此,在这种情况下,JPA 实体使用它自己的 ID 作为盐进行加密。

这是一个在没有注释的情况下进行加密/解密的示例,我必须“手动”为每个加密字段创建自定义 get/setter。

StandardDbCipher 只是我的密码类,它在构造过程中接受盐(在本例中是 ID 字段)。密码已固定在其他文件中。

@Entity
public class Applicant implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private String id;

private String profilePic;

private String contact;

private String personalInfo;

@Transient
private StandardDbCipher cipher;

private StandardDbCipher getCipher() {
if (cipher == null) {
cipher = new StandardDbCipher(id);
}
return cipher;
}

private String encrypt (String plain) {
return getCipher().decrypt(plain);
}

private String decrypt (String crypt) {
return getCipher().encrypt(crypt);
}

public String getProfilePic() {
return decrypt(profilePic);
}

public void setProfilePic(String profilePic) {
this.profilePic = encrypt(profilePic);
}

public String getContact() {
return decrypt(contact);
}

public void setContact(String contact) {
this.contact = encrypt(contact);
}

public String getPersonalInfo() {
return decrypt(personalInfo);
}

public void setPersonalInfo(String personalInfo) {
this.personalInfo = encrypt(personalInfo);
}

}

我想使用 @Converter 简化代码并减少样板文件,但不知道如何将 ID 作为盐?有任何想法吗?也许还有其他注释?

最佳答案

如果这是您需要在许多实体中执行的操作,那么我认为您可以尝试面向方面编程(最知名的实现是 AspectJ)。 Spring 也与之集成(我没有使用它,因为我没有使用 Spring)。这个想法是,您可以拥有一些拦截代码,这些代码将在调用对象的方法(在您的情况下是实体的 getter/setter 方法)之前或之后执行,并且在它们内部您可以操作实际的对象/参数/返回值。

您可以在执行setter方法之前调用您的加密方法,并将加密值传递给您的setter。对于解密,您可以在执行 getter 方法后运行您的解密方法。

通过这样做,您的实体将仍然是一个简单的 POJO,并且您不需要为每个实体提供转换器。

。以下是一些演示 AOP 概念的教程:

更新:另一种解决方案可能是使用JPA 实体监听器。您可以对实体中的 @PrePersist 进行加密,对 @PostLoad 回调进行解密,或者对所有此类实体使用单个监听器类。您只需要像这样注释您的 POJO:

@Entity
@EntityListeners(class=EncDecListener.class)
public class Applicant implements Serializable {

}

public class EncDecListener {
@PreUpdate
public void encrypt(Applicatnt a) {
// do encryption
}


@PostLoad
public void decrypt(Applicatnt a) {
// do decryption
}
}

关于java - Spring JPA @Converter - 如何使用它自己的 id 作为盐来加密实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57049632/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com