中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在java中對日志的數據進行脫敏

發布時間:2021-05-24 18:18:38 來源:億速云 閱讀:619 作者:Leah 欄目:編程語言

怎么在java中對日志的數據進行脫敏?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

思路

1。在 model層進行處理,直接重寫get方法,在寫一個getPlain 獲取明文方法。(缺點:數據庫寫入和json序列化傳遞時使用的都是密文)

2.利用 日志組件過濾 特定的key,去進行脫敏(缺點:對所有的日志輸出全部要正則匹配,非常耗時。)

由1,2的利弊,肯定會選擇1,然后考慮一種實現(在model層定義方法,獲取它的一個復制類,復制類里面的信息都是脫敏的,日志輸出時只輸出 復制對象),克服掉1的缺點 

1.定義接口類

public interface NoSensitiveObj<T> {

 default T noSensitiveObj(){
  return (T) this;
 }
}

2.實現類 如果這個類沒有敏感信息,只實現 NoSensitiveObj ,不需要實現里面的方法

public class User implements NoSensitiveObj<User>{

 private String name;
 
 private String phone;
 
 private String email;

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }

 public String getPhone() {
  return phone;
 }

 public void setPhone(String phone) {
  this.phone = phone;
 }

 public String getEmail() {
  return email;
 }

 public void setEmail(String email) {
  this.email = email;
 }

 @Override
 public User noSensitiveObj() {
   User t;
   t=new User();
   t.setEmail(SensitiveInfoUtils.email(email));
   t.setName(SensitiveInfoUtils.chineseName(name));
   t.setPhone(SensitiveInfoUtils.mobilePhone(phone));
  return t;
 }
 
}

3.工具類

public class SensitiveInfoUtils {

 /**
  * [中文姓名] 只顯示第一個漢字,其他隱藏為2個星號<例子:李**>
  */
 public static String chineseName(final String fullName) {
  if (StringUtils.isBlank(fullName)) {
   return "";
  }
  final String name = StringUtils.left(fullName, 1);
  return StringUtils.rightPad(name, StringUtils.length(fullName), "*");
 }

 /**
  * [中文姓名] 只顯示第一個漢字,其他隱藏為2個星號<例子:李**>
  */
 public static String chineseName(final String familyName, final String givenName) {
  if (StringUtils.isBlank(familyName) || StringUtils.isBlank(givenName)) {
   return "";
  }
  return chineseName(familyName + givenName);
 }

 /**
  * [身份證號] 顯示最后四位,其他隱藏。共計18位或者15位。<例子:*************5762>
  */
 public static String idCardNum(final String id) {
  if (StringUtils.isBlank(id)) {
   return "";
  }

  return StringUtils.left(id, 3).concat(StringUtils
    .removeStart(StringUtils.leftPad(StringUtils.right(id, 3), StringUtils.length(id), "*"), "***"));
 }

 /**
  * [固定電話] 后四位,其他隱藏<例子:****1234>
  */
 public static String fixedPhone(final String num) {
  if (StringUtils.isBlank(num)) {
   return "";
  }
  return StringUtils.leftPad(StringUtils.right(num, 4), StringUtils.length(num), "*");
 }

 /**
  * [手機號碼] 前三位,后四位,其他隱藏<例子:138******1234>
  */
 public static String mobilePhone(final String num) {
  if (StringUtils.isBlank(num)) {
   return "";
  }
  return StringUtils.left(num, 2).concat(StringUtils
    .removeStart(StringUtils.leftPad(StringUtils.right(num, 2), StringUtils.length(num), "*"), "***"));

 }

 /**
  * [地址] 只顯示到地區,不顯示詳細地址;我們要對個人信息增強保護<例子:北京市海淀區****>
  *
  * @param sensitiveSize
  *   敏感信息長度
  */
 public static String address(final String address, final int sensitiveSize) {
  if (StringUtils.isBlank(address)) {
   return "";
  }
  final int length = StringUtils.length(address);
  return StringUtils.rightPad(StringUtils.left(address, length - sensitiveSize), length, "*");
 }

 /**
  * [電子郵箱] 郵箱前綴僅顯示第一個字母,前綴其他隱藏,用星號代替,@及后面的地址顯示<例子:g**@163.com>
  */
 public static String email(final String email) {
  if (StringUtils.isBlank(email)) {
   return "";
  }
  final int index = StringUtils.indexOf(email, "@");
  if (index <= 1) {
   return email;
  } else {
   return StringUtils.rightPad(StringUtils.left(email, 1), index, "*")
     .concat(StringUtils.mid(email, index, StringUtils.length(email)));
  }
 }

 /**
  * [銀行卡號] 前六位,后四位,其他用星號隱藏每位1個星號<例子:6222600**********1234>
  */
 public static String bankCard(final String cardNum) {
  if (StringUtils.isBlank(cardNum)) {
   return "";
  }
  return StringUtils.left(cardNum, 6).concat(StringUtils.removeStart(
    StringUtils.leftPad(StringUtils.right(cardNum, 4), StringUtils.length(cardNum), "*"), "******"));
 }

 /**
  * [公司開戶銀行聯號] 公司開戶銀行聯行號,顯示前兩位,其他用星號隱藏,每位1個星號<例子:12********>
  */
 public static String cnapsCode(final String code) {
  if (StringUtils.isBlank(code)) {
   return "";
  }
  return StringUtils.rightPad(StringUtils.left(code, 2), StringUtils.length(code), "*");
 }

}

4.測試

public class Test {

 private static final Logger logger=LoggerFactory.getLogger(Test.class);
 
 public static void main(String[] args) {
  User user=new User();
  user.setName("張三");
  user.setPhone("18666218777");
  user.setEmail("zhangsan@qq.com");
  System.out.println(JSON.toJSONString(user.noSensitiveObj()));
  
 }
}

常用的java框架有哪些

1.SpringMVC,Spring Web MVC是一種基于Java的實現了Web MVC設計模式的請求驅動類型的輕量級Web框架。2.Shiro,Apache Shiro是Java的一個安全框架。3.Mybatis,MyBatis 是支持普通 SQL查詢,存儲過程和高級映射的優秀持久層框架。4.Dubbo,Dubbo是一個分布式服務框架。5.Maven,Maven是個項目管理和構建自動化工具。6.RabbitMQ,RabbitMQ是用Erlang實現的一個高并發高可靠AMQP消息隊列服務器。7.Ehcache,EhCache 是一個純Java的進程內緩存框架。

關于怎么在java中對日志的數據進行脫敏問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

海盐县| 黑水县| 贵港市| 砚山县| 赤水市| 镇平县| 富阳市| 商洛市| 绥芬河市| 二连浩特市| 嘉定区| 洛浦县| 光山县| 油尖旺区| 垫江县| 多伦县| 上犹县| 和硕县| 湖州市| 阳江市| 剑川县| 罗城| 建昌县| 兴国县| 黎川县| 三亚市| 台安县| 拜泉县| 丽水市| 高州市| 阳山县| 和林格尔县| 阜南县| 海城市| 庄河市| 天水市| 乐陵市| 台南市| 邳州市| 泸西县| 视频|