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

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

业务脱敏

脱敏介绍: 很多数据在业务展示上需要添加上脱敏处理,部分人是不能查看敏感信息的,如电话号码脱敏: 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;
    }),
    ;
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值