springboot 项目使用fastjson实现脱敏功能

本文介绍了如何在SpringBoot项目中利用Fastjson实现数据脱敏功能,以减少代码复杂性和提高代码解耦。通过定义统一的脱敏接口、枚举类,以及自定义Fastjson序列化拦截器,实现了在HTTP消息转换过程中自动处理敏感信息,例如电话号码和姓名的脱敏。测试结果显示,该方法能够有效脱敏并正确返回JSON数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

业务脱敏

脱敏介绍: 很多数据在业务展示上需要添加上脱敏处理,部分人是不能查看敏感信息的,如电话号码脱敏: 17688990101,期望在前端展示的数据176***0101,名称脱敏:李大大,期望在前端展示的数据,李大。

一般实现: 在数据返回时添加if else判断是否是需要脱敏,是电话号码脱敏还是名称脱敏,返回数据需要做很多麻烦的操作,而且容易遗漏部分接口。

fastjson序列化脱敏: 基于spring mvc、springboot项目,在通过后端使用json格式返回数据时,都会被HttpMessageConverters此类来做处理,fastjson集成到spring提供了FastJsonHttpMessageConverter为序列化做拦截处理。只需要数据在返回前端时做序列化拦截,将需要处理的字段自定义处理就完成,能大大简化代码实现难度,对代码解耦提升特别巨大。

实现思路: 在实现序列化时,是可以获取字段的属性、当前对象。fastjson提供了很多案例,包括日期格式的返回,所以需要借鉴此方式,使用注解,在序列化过程拦截起来,并按照预期完成脱敏。
具体实现如下:

定义统一脱敏接口

public interface DataMaskingOperation {
   
    String MASK_CHAR="*";
    String mask(String content,String maskChar);
}

定义枚举类

public enum DataMaskingEnum {
   
    NO_MASK((str,maskChar)->str),

    PHONE_MASK((str,maskChar)->{
   
        UserContext userContext = RequestLinkContext.get();
        if (Objects.nonNull(userContext)) {
   
            if(StringUtils.isNotEmpty(str)&&str.length()>3&&userContext.isMask()){
   
                String phoneStars = str.substring(0,3);
                for (int i = 0; i < str.length() - 3; ++i) {
   
                    phoneStars += maskChar;
                }
                return phoneStars;
            }
        }
       
        return str;
    }),
    ;
<think>好的,我现在需要帮助用户将RTMPose模型转换为ONNX格式或者如何在ONNX中使用RTMPose。首先,我应该回忆一下MMDeploy的相关知识,因为用户提供的引用里提到了MMDeploy,这可能是一个关键工具。 用户的问题涉及到模型转换,而引用[1]提到使用MMDeploy得到ONNX模型,所以应该从这里入手。首先,我需要确认RTMPose是否在MMDeploy的支持列表中。MMDeploy是OpenMMLab的一个部署工具,支持多种模型的导出,包括检测、分割、姿态估计等,所以RTMPose作为OpenMMLab的模型,应该支持。 接下来,步骤可能包括安装MMDeploy、配置环境,然后使用提供的工具或脚本进行转换。用户可能需要安装一些依赖,比如ONNX运行时,PyTorch,以及MMCV等。需要提醒用户检查版本兼容性,因为不同版本的库可能会有不同的接口。 然后,转换过程中可能需要加载RTMPose的配置文件(config)和检查点文件(checkpoint),使用MMDeploy的转换工具,比如tools/deploy.py脚本,指定后端为ONNX。同时,可能需要指定输入的形状,例如输入图片的大小,这对后续推理很重要。 转换完成后,用户可能需要验证生成的ONNX模型是否正确。引用[1]中也提到了使用Python SDK进行验证,可以建议用户使用ONNX Runtime加载模型,运行示例输入,检查输出是否合理。 另外,用户可能还想知道如何在ONNX中使用转换后的模型,比如进行推理的步骤。这部分需要指导如何加载ONNX模型,预处理输入数据,运行推理,以及后处理结果。可能还需要注意输入输出的名称和格式,是否符合预期。 可能遇到的问题包括版本冲突、模型转换时的错误(如不支持的算子),或者推理时的形状不匹配。这时候需要建议用户查看错误信息,检查环境配置,或者到社区寻求帮助。 最后,生成的相关问题需要考虑用户可能的后续疑问,比如性能优化、部署到其他平台、量化模型等,尤其是引用[2]提到了量化到GGUF格式,虽然用户现在可能不需要,但相关问题可以引导他们进一步探索。 总结来说,回答的结构应该是:先介绍使用MMDeploy进行转换的步骤,然后说明如何验证和使用转换后的模型,最后提醒常见问题和注意事项。确保步骤清晰,命令准确,并引用相关的参考资料。</think>要将RTMPose模型转换为ONNX格式并在ONNX中使用,可按照以下步骤操作: --- ### **步骤1:环境准备** 1. 安装MMDeploy及相关依赖: ```bash pip install openmim mim install mmengine mmcv mmpose pip install mmdeploy==1.3.0 # 确保版本与MMPose兼容[^1] ``` 2. 安装ONNX Runtime: ```bash pip install onnxruntime ``` --- ### **步骤2:模型转换** 1. **下载RTMPose配置文件和预训练权重** 从[MMPose官方仓库](https://github.com/open-mmlab/mmpose)获取RTMPose的配置文件(如`rtmpose-s_8xb256-420e_coco-256x192.py`)和对应的权重文件(`.pth`)。 2. **使用MMDeploy导出ONNX模型** 运行以下命令,指定输入尺寸(如`256x192`): ```bash python tools/deploy.py \ configs/mmpose/pose-detection_onnxruntime_dynamic.py \ /path/to/rtmpose-s_8xb256-420e_coco-256x192.py \ /path/to/rtmpose-s.pth \ /path/to/test_image.jpg \ --work-dir ./rtmpose-onnx \ --device cpu \ --show ``` 生成的ONNX文件将保存在`./rtmpose-onnx`目录中[^1]。 --- ### **步骤3:验证ONNX模型** 1. **使用ONNX Runtime推理** ```python import cv2 import numpy as np import onnxruntime # 加载ONNX模型 session = onnxruntime.InferenceSession("rtmpose-s.onnx") # 预处理输入图像(尺寸需与导出时一致) image = cv2.imread("test.jpg") image = cv2.resize(image, (192, 256)) input_data = np.transpose(image, (2, 0, 1)).astype(np.float32)[None, ...] # 运行推理 outputs = session.run(None, {"input": input_data}) keypoints = outputs[0] # 关键点坐标 ``` 2. **后处理** 根据MMPose的输出格式解析关键点,通常需要应用非极大值抑制(NMS)或阈值过滤。 --- ### **注意事项** 1. **动态输入尺寸** 若需支持动态输入,在导出时添加`--dynamic`参数: ```bash --dynamic ``` 2. **算子兼容性** 若遇到不支持的算子(如`DeformConv2d`),需检查MMDeploy版本或联系社区更新支持列表。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值