我正在实体类中为属性@Encrypted
使用name
注释,该注释用于name
的加密和解密目的。我的实体类如下所示。
@XmlRootElement(name = "student")
@Entity
@Table(name = "Student")
@Audited
@EntityListeners(EncryptionAspect.class)
public class Student extends BaseDomain {
......
@Column(name = "STUDENTNAME")
@Encrypted
private String studentName;
.... //followed by other attriubtes with constructor and getters and setters
}
我的EncryptionAspect
类如下所示
@Aspect
public class EncryptionAspect {
@PrePersist
@PreUpdate
public void encryptData(Object data) throws IllegalArgumentException,
Exception {
//Encryption logic here using reflection
}
@PostLoad
@PostUpdate
public static void decryptData(Object data) throws Exception {
//Decryption logic here using reflection
}
}
输入文本字段中的名称将以加密形式存储在数据库中。当它显示在应用程序中时,它将采用解密格式。加密和解密在除注册表之外的所有地方都可以正常工作。问题是在注册新学生时,输入学生姓名的字段在单击保存按钮时突然显示加密的字符串。但是,当我返回到注册学生列表页面并单击新注册的名称时,将打开同一注册页面以仅在名称字段中使用解密的名称进行编辑。唯一的问题是注册一个新的。我认为这是因为单击保存按钮时字段中的名称正试图保留。但是在持久化之前,由于我的Aspect
类,它将通过我的加密逻辑。同时,名称字段正在用我不想要的加密字段刷新。我希望它仅使用解密的文件刷新。我相信,如果持久化后从数据库中加载该字段,那么它将仅显示解密的名称。那么如何做到这一点。
输入名称字段的JSF代码如下
<t:inputText id="Name" styleClass="form-control" disabled="#{!RegistrationForm.regStart}"
maxlength="20"
value="#{RegistrationForm.student.studentName}">
<a4j:support ajaxSingle="true" event="onchange"/>
<a4j:support ajaxSingle="true" event="onkeyup"/>
</t:inputText>
只有在我的Aspect类中的一些注释帮助下,持久化后才可以刷新文本字段。