java日志脱敏_java 日志脱敏框架 sensitive,优雅的打印脱敏日志
問題
為了保證用戶的信息安全,敏感信息需要脫敏。
項目開發過程中,每次處理敏感信息的日志問題感覺很麻煩,大部分都是用工具類單獨處理,不利于以后統一管理,很不優雅。
于是,就寫了一個基于 java 注解的日志脫敏工具。
項目介紹
日志脫敏是常見的安全需求。普通的基于工具類方法的方式,對代碼的入侵性太強。編寫起來又特別麻煩。
本項目提供基于注解的方式,并且內置了常見的脫敏方式,便于開發。
用戶也可以基于自己的實際需要,自定義注解。
日志脫敏
為了金融交易的安全性,國家強制規定對于以下信息是要日志脫敏的:
用戶名
手機號
郵箱
銀行卡號
密碼
持久化加密
存儲的時候上面的信息都需要加密,密碼為不可逆加密,其他為可逆加密。
類似的功能有很多。不在本系統的解決范圍內。
特性
基于注解的日志脫敏
可以自定義策略實現,策略生效條件
常見的脫敏內置方案
支持 jdk1.7+
快速開始
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
@Test
public 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 框架的可移植性。
Springboot + SLF4j + Log4j2 打印異常日志時,耗時要5-6秒
1.使用jps -l 查看springboot項目的進程ID 2.使用命令jstack -l 進程ID > log.txt 打印堆棧信息到文件,內容如下: "http-nio-8065 ...
mybatis結合log4j打印SQL日志
mybatis結合log4j打印SQL日志 1.Maven引用jar包 默認的mybatis不能打印出SQL日志,不便于查看調試,須要結合log4jdbc-log4j2就能夠完整的輸入SQL的調試信息 ...
java 日志脫敏框架 sensitive-v0.0.4 系統內置常見注解,支持自定義注解
項目介紹 日志脫敏是常見的安全需求.普通的基于工具類方法的方式,對代碼的入侵性太強.編寫起來又特別麻煩. 本項目提供基于注解的方式,并且內置了常見的脫敏方式,便于開發. 特性 基于注解的日志脫敏. 可 ...
java 日志脫敏框架 sensitive-新版本0.0.2-深度拷貝,屬性為對象和集合的支持
項目介紹 日志脫敏是常見的安全需求.普通的基于工具類方法的方式,對代碼的入侵性太強.編寫起來又特別麻煩. 本項目提供基于注解的方式,并且內置了常見的脫敏方式,便于開發. 用戶也可以基于自己的實際需要, ...
Java日志脫敏框架 sensitive-v0.0.4 系統內置常見注解,支持自定義注解
項目介紹 日志脫敏是常見的安全需求.普通的基于工具類方法的方式,對代碼的入侵性太強.編寫起來又特別麻煩. 本項目提供基于注解的方式,并且內置了常見的脫敏方式,便于開發. 特性 基于注解的日志脫敏. 可 ...
(網頁)Java日志記錄框架Logback配置詳解(企業級應用解決方案)(轉)
轉自CSDN: 前言 Logback是現在比較流行的一個日志記錄框架,它的配置比較簡單學習成本相對較低,所以剛剛接觸該框架的朋友不要畏懼,多花點耐心很快就能靈活應用了.本篇博文不會具體介紹Logbac ...
Java日志系統框架的設計與實現
推薦一篇好的文章介紹java日志系統框架的設計的文章:http://soft.chinabyte.com/database/438/11321938.shtml 文章內容總結: 日志系統對跟蹤調試.程 ...
如何優雅地打印一個Java對象?
你好呀,我是沉默王二,一個和黃家駒一樣身高,和劉德華一樣顏值的程序員.雖然已經寫了十多年的 Java 代碼,但仍然覺得自己是個菜鳥(請允許我慚愧一下). 在一個月黑風高的夜晚,我思前想后,覺得再也不能 ...
隨機推薦
項目管理的一些Tip
最近帶領了一個大概150人天的項目,做一些備注: 1, 知人善用. 排期分任務的時候,要先了解每個團隊成員的特點,包括技術水平.性格,看他是適合做技術難度大的模塊還是適合做業務邏輯復雜的模塊. 2, ...
JVM之Class文件結構
每一個class文件對應一個類或者接口,但是一個類或者接口不一定生成class文件,classloader直接生成. 8為字節為基礎的二進制流,各個數據項按照嚴格的順序排列在class文件中,沒有任何 ...
Ubuntu默認防火墻安裝、啟用、配置、端口、查看狀態相關信息
Ubuntu附帶了一個相對iptables簡單很多的防火墻 配置工具:ufw ufw防火墻 即uncomplicated firewall,不復雜的防火墻,繁瑣部分的設置還是需要去到iptables ...
允許FTP用戶登錄并禁止Shell登錄的方法
最近安裝了vsftpd做FTP服務,發現系統用戶的登錄shell設置為/sbin/nologin,就無法使用FTP服務.網上資料說,vsftpd會為每個FTP登錄用戶去在/etc/shells中檢查對 ...
JavaScript學習匯總
對于JavaScript,還是無法割舍,有心無力,時間總是匆匆,暫且都放在這里吧 javascript中this的使用 寫的很不錯的一偏文章,簡單看了下,mark了吧 原文:http://davids ...
HTTP各個狀態返回值
轉載來自于:http://desert3.iteye.com/blog/1136548 502 Bad Gateway:tomcat沒有啟動起來?504 Gateway Time-out: nginx ...
STL容器迭代器失效分析
連續內存序列容器(vector, string, deque) 對于連續內存序列STL容器,例如vector,string,deque,刪除當前iterator會使得后面所有的iterator都失效, ...
PHP 中運用 elasticsearch
PHP擴展安裝 1. 環境要求:PHP_VERSION >= 5.3.9,composer工具 2. 在E盤新建文件夾命名為elastic,,拷貝composer.phar到 ? ? ?E:/e ...
設計模式_Visitor_訪問者模式
形象例子: 情人節到了,要給每個MM送一束鮮花和一張卡片,可是每個MM送的花都要針 對她個人的特點,每張卡片也要根據個人的特點來挑,我一個人哪搞得清楚,還是找花店老板和禮品店老板做一下Visitor, ...
MSSqlServer 主從同步復制原理(發布/訂閱)
基本模型 1.發布類型: 快照發布:用于為事務復制和合并復制提供初始數據集:在適合數據完全刷新時也可以使用快照復制.利用這三種復制,SQL Server 提供功能強大且靈活的系統,以便使企業范圍內的數 ...
總結
以上是生活随笔為你收集整理的java日志脱敏_java 日志脱敏框架 sensitive,优雅的打印脱敏日志的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php京东秒杀,小猿圈Python之实现
- 下一篇: 微信小程序实现直播间点赞飘心效果的示例代