代码拉取完成,页面将自动刷新
作用:在数据入库时进行加密,在数据出库时进行解密,不明文存储数据,增强数据的安全性。
该注解仅能修饰接口、类、枚举。
该注解在使用Mybatis进行增删改查时生效,不影响数据在Controller和Service中进行业务逻辑处理。
@Documented
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
public @interface CryptEntity {
}
该注解仅能修饰成员变量。
该注解在使用Mybatis进行增删改查时生效,不影响数据在Controller和Service中进行业务逻辑处理。
@Documented
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD})
public @interface CryptField {
/**
* 加密枚举类型:AES/Base64 ...
*/
EncryptTypeEnum type();
}
@CryptEntity注解修饰类,@CryptField注解修饰成员变量同时需指定数据加密类型,当前支持对称和Base64加解密。
@CryptEntity和@CryptField必须一起使用功能才生效。
@CryptEntity
public class DataMasking implements Serializable {
/**
* base64加解密
*/
@CryptField(type = EncryptTypeEnum.BASE64)
@ApiModelProperty("base64加解密")
@TableField(value = "base64")
private String base64;
/**
* 对称加密
*/
@CryptField(type = EncryptTypeEnum.AES)
@ApiModelProperty("对称加密")
private String sea;
}
支持拓展加密类型,具体步骤如下:
①添加枚举类型
/**
* 加密类型枚举
**/
public enum EncryptTypeEnum {
/**
* AES加密
*/
AES,
/**
* base64加密
*/
BASE64,
/**
* xxxx加密
*/
xxxx,
}
②实现Crypt接口,重写加密解密方法
/**
* 加密算法接口定义 新增加密算法实现该接口即可
**/
public interface Crypt {
/**
* 加密
* @param plain 原始明文
* @return 密文
*/
String encrypt(String plain);
/**
* 解密
* @param cipher 密文
* @return 原始明文
*/
String decrypt(String cipher);
}
③将加密方式添加到加密实现类加载器中。
/**
* 加密实现类加载器(当前已有AES BASE64两种方式)
* 后续如果有新增 需要同步添加
**/
@Component
public class CryptLoader {
/**
* 加载所有加密方式实现类
*/
public CryptLoader() {
CryptContext.setCrypt(EncryptTypeEnum.AES, new AESCryptImpl());
CryptContext.setCrypt(EncryptTypeEnum.BASE64, new Base64CryptImpl());
CryptContext.setCrypt(EncryptTypeEnum.BASE64, new XXXXCryptImpl());
}
}
由于在数据库内存储的数据为加密后的数据,如需对被加密字段进行匹配检索时,有如下注意事项:
不支持模糊查询,仅支持精确查询,
不支持Mybatis自带的QueryWrapper方法,仅支持自定义mapper及xml,
必须使用已添加CryptEntity和CryptField注解的实体类或自定义类作为参数,
在mapper中必须使用@Param注解将参数名称映射为"crypt",如下:
DataMasking selectById(@Param("crypt")DataMasking dataMasking);
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。