java 日志脱敏框架 sensitive,优雅的打印脱敏日志
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,问题为了保证用户的信息安全,敏感信息需要脱敏。项目开发过程中,每次处理敏感信息的日志问题感觉很麻烦,大部分都是用工具类单独处理,不利于以后统一管理,很不优雅。于是,就写了一个基于 java 注解的日志
千家信息网最后更新 2026年11月02日java 日志脱敏框架 sensitive,优雅的打印脱敏日志
问题
为了保证用户的信息安全,敏感信息需要脱敏。
项目开发过程中,每次处理敏感信息的日志问题感觉很麻烦,大部分都是用工具类单独处理,不利于以后统一管理,很不优雅。
于是,就写了一个基于 java 注解的日志脱敏工具。
github sensitive
项目介绍
日志脱敏是常见的安全需求。普通的基于工具类方法的方式,对代码的***性太强。编写起来又特别麻烦。
本项目提供基于注解的方式,并且内置了常见的脱敏方式,便于开发。
用户也可以基于自己的实际需要,自定义注解。
变更日志
日志脱敏
为了金融交易的安全性,国家强制规定对于以下信息是要日志脱敏的:
用户名
手机号
邮箱
银行卡号
- 密码
持久化加密
存储的时候上面的信息都需要加密,密码为不可逆加密,其他为可逆加密。
类似的功能有很多。不在本系统的解决范围内。
特性
基于注解的日志脱敏
可以自定义策略实现,策略生效条件
- 常见的脱敏内置方案
快速开始
maven 导入
com.github.houbb sensitive-core 0.0.1 定义对象
- User.java
我们对 password 使用脱敏,指定脱敏策略为 StrategyPassword。(直接返回 null)
public class User { @Sensitive(strategy = StrategyChineseName.class) private String username; @Sensitive(strategy = StrategyCardId.class) private String idCard; @Sensitive(strategy = StrategyPassword.class) private String password; @Sensitive(strategy = StrategyEmail.class) private String email; @Sensitive(strategy = StrategyPhone.class) private String phone; //Getter & Setter //toString()}- 测试
@Test public void UserSensitiveTest() { User user = buildUser(); System.out.println("脱敏前原始: " + user); User sensitiveUser = SensitiveUtil.desCopy(user); System.out.println("脱敏对象: " + sensitiveUser); System.out.println("脱敏后原始: " + user); } private User buildUser() { User user = new User(); user.setUsername("脱敏君"); user.setPassword("123456"); user.setEmail("12345@qq.com"); user.setIdCard("123456190001011234"); user.setPhone("18888888888"); return user; }- 输出信息如下
脱敏前原始: User{username='脱敏君', idCard='123456190001011234', password='1234567', email='12345@qq.com', phone='18888888888'}脱敏对象: User{username='脱*君', idCard='123456**********34', password='null', email='123**@qq.com', phone='188****8888'}脱敏后原始: User{username='脱敏君', idCard='123456190001011234', password='1234567', email='12345@qq.com', phone='18888888888'}我们可以直接利用 sensitiveUser 去打印日志信息,而这个对象对于代码其他流程不影响,我们依然可以使用原来的 user 对象。
自定义脱敏策略生效的场景
默认情况下,我们指定的场景都是生效的。
但是你可能需要有些情况下不进行脱敏,比如有些用户密码为 123456,你觉得这种用户不脱敏也罢。
- UserPasswordCondition.java
@Sensitive(condition = ConditionFooPassword.class, strategy = StrategyPassword.class)private String password;其他保持不变,我们指定了一个 condition,实现如下:
- ConditionFooPassword.java
public class ConditionFooPassword implements ICondition { @Override public boolean valid(IContext context) { try { Field field = context.getCurrentField(); final Object currentObj = context.getCurrentObject(); final String password = (String) field.get(currentObj); return !password.equals("123456"); } catch (IllegalAccessException e) { throw new RuntimeException(e); } }}也就是只有当密码不是 123456 时密码脱敏策略才会生效。
针对单个字段
上面的例子是基于注解式的编程,如果你只是单个字段。比如
- singleSensitiveTest
@Testpublic void singleSensitiveTest() { final String email = "123456@qq.com"; IStrategy strategy = new StrategyEmail(); final String emailSensitive = (String) strategy.des(email, null); System.out.println("脱敏后的邮箱:" + emailSensitive);}- 日志信息
脱敏后的邮箱:123***@qq.com待优化的地方
全新对象创建
这种方式为了避免修改原始对象,创建了一个全新的对象,有点点浪费,可以优化。
其他方法
可以基于 log4j2/logback 等转换器进行敏感信息的脱敏,但是不具有不同的 log 框架的可移植性。
脱敏
日志
信息
对象
原始
密码
注解
用户
方式
策略
加密
安全
工具
常见
邮箱
项目
代码
全新
单个
场景
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技保险
互联网科技未来
万易互联网科技有限公司
互联网科技公司官网
世界互联网领先科技成果
极限挑战互联网科技
西安互联网科技公司
融势互联网科技
友谊互联网络科技
互联网金融 科技创新
湖南洣水互联网科技有限公司扣款
互联网实体化科技化
深圳市运趣互联网科技有限公司
玖二柒互联网科技公司待遇
互联网保险科技创业
中国互联网公司排名锤子科技
中天科技中国工业互联网
互联网科技手机排行榜
科技互联网公司两年变化
陕西彩京云互联网科技有限公司
中关村互联网 科技集团
互联网金融与金融科技
北京互联网科技公司
易互联网科技有限公司
万易互联网科技有限公司
碳银互联网科技
科技互联网公司logo
广州善班互联网科技
成都玖崟互联网科技有限公司乐商圈怎么样
乌苏新华互联网科技做什么的