国外炫酷网站欣赏,爱奇艺影业公司网站开发意义,网络营销是什么样子的,公众号开发小程序开发在开发中有时候需要打印一些对象的属性值#xff0c; 但是其中含有一些敏感字段#xff0c; 不能打印明文而是需要脱敏打印#xff0c;写了一个工具#xff0c; 可以将对象转换成JSON字符串#xff0c;并且可以指定要脱敏的字段名称
package com.visy.utils;import cn.hut…在开发中有时候需要打印一些对象的属性值 但是其中含有一些敏感字段 不能打印明文而是需要脱敏打印写了一个工具 可以将对象转换成JSON字符串并且可以指定要脱敏的字段名称packagecom.visy.utils;importcn.hutool.core.util.ObjectUtil;importcom.alibaba.fastjson.JSON;importcom.alibaba.fastjson.JSONObject;importcom.alibaba.fastjson.serializer.SerializerFeature;importjava.util.Arrays;publicclassLogUtil{/** * 安全的JSON字符串转换可脱敏 * param obj 待序列化对象 * param fieldNames 待脱敏的字段名称 * return JSON字符串 */publicstaticStringtoJsonSafety(Objectobj,String...fieldNames){if(fieldNamesnull||fieldNames.length0){returntoJson(obj);}JSONObjectjsonObject(JSONObject)JSON.toJSON(obj);for(StringfieldName:fieldNames){ObjectvaluejsonObject.get(fieldName);if(ObjectUtil.isNotNull(value)){jsonObject.put(fieldName,mask(value.toString()));}}returntoJson(jsonObject);}privatestaticStringtoJson(Objectobj){returnJSON.toJSONString(obj,SerializerFeature.WriteMapNullValue);}/** * 字符串脱敏方法自动计算并隐藏部分字符 * param value 待脱敏的字符串 * return 脱敏后的字符串 */publicstaticStringmask(Stringvalue){if(valuenull||value.isEmpty()){returnvalue;}intlengthvalue.length(),halfLengthlength/2;if(halfLength1){// 1 ~ 3 个字符 全部脱敏returncreateRepeatedString(*,length);}else{// 4 个字符 前后各保留1/4 个字符intbeforeLengthhalfLength/2;returnmask(value,*,beforeLength,halfLength-beforeLength);}}/** * 数据脱敏方法 * param value 待脱敏的原始数据 * param ch 脱敏占位字符 * param beforeLength 前保留字符数 * param afterLength 后保留字符数 * return 脱敏后的数据 */publicstaticStringmask(Stringvalue,charch,intbeforeLength,intafterLength){// 空值安全检查if(valuenull||value.isEmpty()){returnvalue;}finalintlengthvalue.length(),leastLengthbeforeLengthafterLength;// 长度小于等于leastLength位全部脱敏if(lengthleastLength){if(lengthafterLength){// 剩余长度小于等于afterLength全部脱敏returncreateRepeatedString(ch,length);}// 剩余长度大于afterLength只脱敏前length-afterLength位returncreateRepeatedString(ch,length-afterLength)value.substring(length-afterLength);}returnvalue.substring(0,beforeLength)createRepeatedString(ch,length-leastLength)value.substring(length-afterLength);}/** * 创建重复字符的字符串 * param ch 要重复的字符 * param count 重复次数 * return 重复字符组成的字符串 */privatestaticStringcreateRepeatedString(charch,intcount){if(count0){return;}char[]charsnewchar[count];Arrays.fill(chars,ch);returnnewString(chars);}}使用publicclassLogUtilTest{publicstaticvoidmain(String[]args){UserusernewUser();user.setName(张三);user.setAge(22);user.setIdCard(320381198812252138);//打印结果{idCard:3203*********52138,name:张三,age:22}System.out.println(LogUtil.toJsonSafety(user,idCard));}DatastaticclassUser{privateStringname;privateIntegerage;privateStringidCard;}}