千家信息网

怎么修改JSON字符串中的敏感信息

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要介绍了怎么修改JSON字符串中的敏感信息,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。修改JSON字符串中的敏感信息项目要
千家信息网最后更新 2026年11月03日怎么修改JSON字符串中的敏感信息

这篇文章主要介绍了怎么修改JSON字符串中的敏感信息,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

修改JSON字符串中的敏感信息

项目要求把json字符串里面的敏感信息加密

比如手机号身份证之类,这就要求遍历json,并且覆盖所有的敏感key,原本以为挺难的,静下心来想了想,代码修修改改大约一个小时搞定了,其实是一个简单的递归,跟遍历一个目录并输出所有文件名一样

废话少说,直接贴代码和测试用例。

package com.ucredit.test; import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONArray;import com.alibaba.fastjson.JSONObject; /** * Created by beibei on 18/1/24. */public class JsonTest {     public static void main(String[] args) {        String sa = "{'sa':'saas','sb':['sa','ds','sda'],'sc':{'dsa':'21'}}";        JSONObject jsonObject = JSON.parseObject(sa);        System.out.println(changeSensitiveMsg(jsonObject).toJSONString());    }     //递归对象    private static JSONObject changeSensitiveMsg(JSONObject jsonObject) {        for (String key : jsonObject.keySet()) {            String json = jsonObject.getString(key);            if (isObject(json)) {                jsonObject.put(key, changeSensitiveMsg(JSON.parseObject(json)));            } else if (isArray(json)) {                jsonObject.put(key, changeSensitiveMsg(JSON.parseArray(json)));            } else {                //这里才是最终覆盖敏感属性的操作                if (isSensitiveKey(key))                    jsonObject.put(key, "测试");            }        }        return jsonObject;    }     //递归数组    private static JSONArray changeSensitiveMsg(JSONArray jsonArray) {        for (int i = 0; i < jsonArray.size(); i++) {            String value = jsonArray.getString(i);            if (isArray(value)) {                jsonArray.set(i, changeSensitiveMsg(jsonArray.getJSONArray(i)));            } else if (isObject(value)) {                jsonArray.set(i, changeSensitiveMsg(JSON.parseObject(value)));            }        }        return jsonArray;    }     //判断是否是对象,这个方法需要优化,遇到特殊字符相当占时间,可以根据json串首字母直接判断    private static boolean isObject(String str) {        try {            JSON.parseObject(str);            return true;        } catch (Exception e) {            return false;        }    }     //判断是否是数组,这个方法需要优化,遇到特殊字符相当占时间,可以根据json串首字母直接判断    private static boolean isArray(String str) {        try {            JSON.parseArray(str);            return true;        } catch (Exception e) {            return false;        }    }     //是否是敏感key    public static boolean isSensitiveKey(String key) {        return true;    }}

清除敏感字符串内容

连接邮箱、短信等服务器信息中密码属于敏感信息,需要在内存中清除。常规做法是前台传递密码明文对应char[],使用完后把数组每个元素修改为0。

但是必须出现String的情况不适用,比如:连接邮箱服务器使用的用户密码;调用rest接口传递的json字符串包含密码明文。

分析

字符串为final类型,运行期间不可改变,涉及常量池,赋值为null并不会回收内存。但是new String不同,可以回收内存。但是JVM回收不及时,要是可以在使用完成后清除char[]内容,也可以做到不改变常量池中的内容。问题转化为如何清理new String内存?

解决思路

String只是一个引用,它的内容是char[] value,value为内部私有变量,不可以访问。

但是java反射可以搞定这件事,代码如下:

char[] chars = new char[] { 'a', 'a', 'a', 'a' };String valueStr = new String(chars);System.out.println(valueStr);Field field = valueStr.getClass().getDeclaredField("value");field.setAccessible(true);field.set(valueStr, new char[] { 0, 0, 0, 0 });field.setAccessible(false);System.out.println(valueStr);System.out.println("aaaa");System.out.println(new String(new char[] { 'a', 'a', 'a', 'a' }));

改变了私有变量为可访问权限,得到value,改变数组的值,然后再把权限设回去。加上打印常量池字符串和new String同样的内容,结果如下:

测试证明,这种方法是可行的,不会改变后面同样内容的字符串内容。通过查看源码,org.codehaus.jackson.map.ObjectMapper.writeValueAsString(Object value) 方法,返回的字符串也是new String,所以也是适用的。经过测试,不会影响其它相同内容的json字符串。

这样,对于json字符串和new String都可以使用这样的方式清除敏感信息内容。但是需要注意的是:如果不是new出来的字符串,一旦修改了,就会影响常量池字符串内容,后果很严重。

感谢你能够认真阅读完这篇文章,希望小编分享的"怎么修改JSON字符串中的敏感信息"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

字符 字符串 内容 信息 内存 密码 常量 数组 方法 篇文章 测试 代码 递归 特殊 变量 字母 对象 时间 明文 服务器 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 与互联网科技公司 深圳互联网科技公司 融势互联网科技 居家互联网科技有限公司 联恩商钥互联网科技有限公司 须眉科技是互联网公司吗 中国科技互联网公司收入 湖北码尼互联网科技有限公司电话 智腾互联网科技有限公司 苏州五指互联网络科技有限 千方科技属于互联网企业吗 深圳艾果互联网通讯科技 卓翼科技产业互联网合作 长沙互联网科技 广州百诚互联网科技有限公司官网 互联网科技接地气 广西科技产业互联网是什么 陕西九四连强互联网科技有限公司 兰石爱特工业互联网科技分公司 数字科技和互联网金融哪个好 山东特亿宝互联网科技有限公司 上海挚品互联网科技 杭州互联网科技公司 互联网科技宣传片 广西拼得多互联网科技有限公司 深圳国际航运科技和互联网 苏州五指互联网络科技有限 链环科技传统企业怎么转型互联网 特约风豹互联网科技为什么扣费 杭州科技互联网公司有哪些
0