# 数据脱敏注解 >[info] 用途说明:数据脱敏即将一些敏感信息通过加密、格式化等方式处理,展示给用户一个新的或是格式化后的信息,避免了敏感信息的暴露。 ### 脱敏注解 | 注解 | 作用域 | 描述 | ---- | --- | --- | | @SensitiveEncode| service方法 | `脱敏加密注解`,表示该方法的返回值需要脱敏处理 | | @SensitiveDecode| service方法 | `脱敏解密注解`,表示该方法的返回值需要解密(仅支持对脱敏encode之后的解密)| | @SensitiveField | 实体字段 | 表示该字段需要脱敏处理 | >[warning] 重要提醒:数据脱敏是基于AOP实现的,所以不要在同一个类中调用带有上述注解的方法,这样会导致aop失效。 ### 脱敏注解具体用法 1. 给实体字段上添加注解:`@SensitiveField` 只给需要脱敏的字段加注解,不需要脱敏的字段,不用加注解 ~~~ public class LoginUser { /** * 登录人密码 */ @SensitiveField private String password; ~~~ 2. 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; } ~~~ >[info] 注意:在方法上添加注解`@SensitiveEncode`后表示该方法的返回值会进行脱敏处理。 > 脱敏逻辑: > - 拦截器会针对实体LoginUser中的加注解`@SensitiveField`字段进行脱敏处理。 > - 方法返回值类型支持`LoginUser` 也支持` List<LoginUser>` 3. 脱敏数据类型 数据处理规则支持:`加密处理、用户名称格式化、身份证号码格式化、邮件电话格式化等` 语法:字段注解@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 ### 解密处理 @SensitiveDecode >[info] 说明:针对数据进行脱敏加密后,jeecgboot也提供了解密注解,即还原真实数据。 语法:在方法上添加注解@SensitiveDecode,即表示该方法的返回值会做一次解密处理。 ``` @SensitiveDecode public LoginUser getUserByName(String username) { LoginUser user = sysUserService.getEncodeUserInfo(username); return user; } ```