脱敏注解@Sensitive
用途说明:数据脱敏即将一些敏感信息通过加密、格式化等方式处理,展示给用户一个新的或是格式化后的信息,避免了敏感信息的暴露。
一、接口脱敏注解
针对接口数据实现脱敏加密,只加密,一般此方案用于数据加密展示。
1.1 注解介绍
| 注解 | 作用域 | 描述 |
|---|---|---|
| @Sensitive | 实体 | 脱敏加密注解,表示接口返回这个实体的值进行脱敏处理 |
1.2 示例
只需要给实体加上注解,返回接口字段数据自动加密

1.3 脱敏类型
数据处理规则支持:加密处理、用户名称格式化、身份证号码格式化、邮件电话格式化等
语法:字段注解@Sensitive属性type,默认是encode(加密处理)
敏感类型支持如下:
public enum SensitiveEnum {
/**
* 加密
*/
ENCODE,
/**
* 中文名
*/
CHINESE_NAME,
/**
* 身份证号
*/
ID_CARD,
/**
* 座机号
*/
FIXED_PHONE,
/**
* 手机号
*/
MOBILE_PHONE,
/**
* 地址
*/
ADDRESS,
/**
* 电子邮件
*/
EMAIL,
/**
* 银行卡
*/
BANK_CARD,
/**
* 公司开户银行联号
*/
CNAPS_CODE;
}
二、方法脱敏注解
针对service方法可脱敏加密、可解密。
2.1 注解介绍
| 注解 | 作用域 | 描述 |
|---|---|---|
| @SensitiveEncode | service方法 | 脱敏加密注解,表示该方法的返回值需要脱敏处理 |
| @SensitiveDecode | service方法 | 脱敏解密注解,表示该方法的返回值需要解密(仅支持对脱敏encode之后的解密) |
| @SensitiveField | 实体字段 | 表示该字段需要脱敏处理 |
重要提醒:数据脱敏是基于AOP实现的,所以不要在同一个类中调用带有上述注解的方法,这样会导致aop失效。
2.2 脱敏注解用法
- 给实体字段上添加注解:
@SensitiveField;只给需要脱敏的字段加注解,不需要脱敏的字段,不用加注解
public class LoginUser {
/**
* 登录人密码
*/
@SensitiveField
private String password;
- service方法上添加注解
@SensitiveEncode
@Override
@SensitiveEncode
public LoginUser getEncodeUserInfo(String username){
if(oConvertUtils.isEmpty(username)) {
return null;
}
LoginUser loginUser = new LoginUser();
SysUser sysUser = userMapper.getUserByName(username);
if(sysUser==null) {
return null;
}
BeanUtils.copyProperties(sysUser, loginUser);
return loginUser;
}
注意:在方法上添加注解
@SensitiveEncode后表示该方法的返回值会进行脱敏处理。
脱敏逻辑:
- 拦截器会针对实体LoginUser中的加注解
@SensitiveField字段进行脱敏处理。- 方法返回值类型支持
LoginUser也支持List<LoginUser>
- 脱敏数据类型
- 数据处理规则支持:
加密处理、用户名称格式化、身份证号码格式化、邮件电话格式化等 - 语法:字段注解@SensitiveField属性type,默认是encode(加密处理),如:
/**
* 登录人密码
*/
@SensitiveField(type = SensitiveEnum.ENCODE)
private String password;
/**
* 电子邮件
*/
@SensitiveField(type = SensitiveEnum.EMAIL)
private String email;
/**
* 电话
*/
@SensitiveField(type = SensitiveEnum.MOBILE_PHONE)
private String phone;
更多参考枚举类:org.jeecg.common.desensitization.enums.SensitiveEnum
2.3 解密注解用法
语法:在方法上添加注解@SensitiveDecode,即表示该方法的返回值会做一次解密处理。说明:针对数据进行脱敏加密后,jeecgboot也提供了解密注解,即还原真实数据。
@SensitiveDecode
public LoginUser getUserByName(String username) {
LoginUser user = sysUserService.getEncodeUserInfo(username);
return user;
}