最近的项目中,改造,需要将电话、身份证、薪资等敏感信息加密存储。有用到第三方加密工具,初始化并直接调用其API即可。
加密算法、初始化、配置文件这些就不写了,讲下改造中遇到的一个问题。
开始的想法是,在实体类中对需要加密的属性,set时加密,get时解密。但项目运行后发现,数据库中的字段并没有加密,执行完set方法后,在插入数据库数据之前 ,会调用该字段的get方法获取数据插入数据库。所以在额外加一个字段来存储加密的字段。使2者分离。
...
private String identity; // 号码
private String encryptIdentity; // 加密号
...
public String getIdentity() {
return SecretUtils.decrypt(identity);
}
public void setIdentity(String identity) {
this.identity = identity;
}
//---------加密部分--------------//
public String getEncryptIdentity() {
return encryptIdentity;
}
public void setEncryptIdentity(String encryptIdentity) {
this.encryptIdentity = encryptIdentity;
}
在mybatis的xml文件中, 将insert 和 update 的字段稍稍改动,替换成新添加的加密字段。
在service方法里,插入数据库操作之前还要加几段代码
...
user.setEncryptIdentity(SecretUtils.encrypt(user.getIdentity()));
...