java 日志脱敏框架 sensitive,优雅的打印脱敏日志
发表于:2025-01-21 作者:千家信息网编辑
千家信息网最后更新 2025年01月21日,问题为了保证用户的信息安全,敏感信息需要脱敏。项目开发过程中,每次处理敏感信息的日志问题感觉很麻烦,大部分都是用工具类单独处理,不利于以后统一管理,很不优雅。于是,就写了一个基于 java 注解的日志
千家信息网最后更新 2025年01月21日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安全错误
数据库的锁怎样保障安全
重庆开县安卓软件开发机构
sql 查询 所有数据库
db2远程重启数据库
网络技术应用是哪一年开始的
怎么看一个数据库收录多少文献
网络安全 保障网络数据的 能力
北仑游戏软件开发公司电话
数据库分库的制作方法
怀旧服魔兽服务器选哪个
苏州万度网络技术有限公司
贵阳dell服务器报价
数据库系统的二级映像指的是什么
网络技术挑战赛比赛试题
信息网络安全教育教案幼儿园
网络安全有什么法律法规
软件开发英语重要吗
lbe数据库查询
云顶之弈澳洲服务器是哪个
中宾网络技术官网
郴州学it软件开发
淮安企业管理软件开发
服务器系统占比
网络安全和共享中心
ftp服务器即时存储
oracle 本地数据库
广东服务器风扇供应商云空间
福建工程学院数据库
王者荣耀云游戏服务器
计算机软件开发招聘网
智慧医院怎么建设网络安全