保护隐私安全,springboot手机号脱敏技术助你无忧通信

简介: 尊重用户隐私一直是我们在开发应用程序时应重视的问题。在当今移动互联网时代,手机号码作为个人重要信息之一,泄露可能导致隐私侵犯和骚扰问题。为了保护用户的手机号安全,我们可以借助Spring Boot框架提供的强大功能,实现手机号脱敏的有效保护,让通信更加安心无忧。

尊重用户隐私一直是我们在开发应用程序时应重视的问题。在当今移动互联网时代,手机号码作为个人重要信息之一,泄露可能导致隐私侵犯和骚扰问题。为了保护用户的手机号安全,我们可以借助Spring Boot框架提供的强大功能,实现手机号脱敏的有效保护,让通信更加安心无忧。

那么,如何在Spring Boot应用中实现手机号脱敏呢?正好我们在项目中有个关于用户状态的需求,结合实践下面将介绍两种简单而高效的实践方法。

方法一:数据库查询替换字符串

使用mysql SUBSTRING函数

SELECT 
    CONCAT(
        SUBSTRING( mobile, 1, 3 ),
        '****',
    SUBSTRING( mobile, 8 )) AS mobile,
    account_status
FROM
    login_user_info

如上sql,我们将手机号的前三位与后四位截取了出来,中间的四位用**** 做了替换,结果如下:

方法二:基于注解实现

1.创建枚举类

SensitiveEnum

public enum SensitiveEnum {
   
   
    /**
     * 手机号
     */
    MOBILE;
}

2.创建字段注解

SensitiveField

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@JacksonAnnotationsInside
@JsonSerialize(using = SensitiveAspect.class)
public @interface SensitiveField {
   
   
    SensitiveEnum type();
}

3.创建脱敏工具类

SensitiveField

public class SensitiveUtil {
   
   
    /**
     * 隐藏手机号中间四位
     */
    public static String sensitiveMobile(String mobile) {
   
   
        return mobile.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");
    }

}

4.自定义的Jackson序列化器

SensitiveAspect

@NoArgsConstructor
@AllArgsConstructor
public class SensitiveAspect extends JsonSerializer<String> implements ContextualSerializer {
   
   

    private SensitiveEnum sensitiveEnum;

    @Override
    public void serialize( String value,  JsonGenerator gen, SerializerProvider sp) throws IOException {
   
   
        if (StringUtils.isNotBlank(value) && null != sensitiveEnum) {
   
   
            switch (sensitiveEnum) {
   
   
                case MOBILE:
                    gen.writeString(SensitiveUtil.sensitiveMobile(value));
                    break;
                    //其他类型的脱敏处理
                default:
                    gen.writeString(value);
            }
        }
    }

    @Override
    public JsonSerializer<?> createContextual( SerializerProvider sp, BeanProperty bp) throws JsonMappingException {
   
   
        if (bp != null) {
   
   
            if (Objects.equals(bp.getType().getRawClass(), String.class)) {
   
   
                SensitiveField sensitiveField = bp.getAnnotation(SensitiveField.class);
                if (sensitiveField == null) {
   
   
                    sensitiveField = bp.getContextAnnotation(SensitiveField.class);
                }
                if (sensitiveField != null) {
   
   
                    return new SensitiveAspect(sensitiveField.type());
                }
            }
            return sp.findValueSerializer(bp.getType(), bp);
        }
        return sp.findNullValueSerializer(null);
    }

}

5.实体类添加注解

@Data
public class UserStatusReportVo implements Serializable {
   
   
    private static final long serialVersionUID = 1L;

    @SensitiveField(type = SensitiveEnum.MOBILE)
    private String mobile;
    /**
     * 账号状态(0-注销状态  1-正常使用)
     */
    private String accountStatus;
}

通过以上简单的步骤,我们成功实现了使用Spring Boot进行手机号脱敏的功能。用户的隐私得到了有效保护,同时保持了应用程序的正常。展示结果如下:
_20230619233857.png

需要注意的是我们方法二采用的是自定义的Jackson序列化器,是在数据返给前端前序列化数据的时候进行转换的,如果要在导出等非前端展示的数据中使用时,我们可以使用aop对数据进行拦截操作,在给对象赋值时进行数据操作。

目录
相关文章
|
2月前
|
存储 安全 前端开发
基于springboot技术的美食烹饪互动平台的设计与实现
基于springboot技术的美食烹饪互动平台的设计与实现
|
2月前
|
Java 关系型数据库 MySQL
基于SpringBoot华强北二手手机商城系统
基于SpringBoot华强北二手手机商城系统
|
3月前
|
机器学习/深度学习 人工智能 自然语言处理
springboot基于人工智能和自然语言理解技术的医院智能导医系统源码
智能导诊系统可为患者提供线上挂号智能辅助服务,患者根据提示手动输入自己的基本症状,通过智能对话方式,该系统会依据大数据一步步帮助患者“诊断”,并最终推荐就医的科室和相关专家。患者可自主选择,实现“一键挂号”。这一模式将精确的导诊服务前置,从源头上让医疗服务更高效。
373 2
|
4月前
|
前端开发 Java 调度
springboot整合SSE技术开发经验总结及心得
springboot整合SSE技术开发经验总结及心得
227 0
|
2月前
|
Java 数据库 数据安全/隐私保护
【SpringBoot】Validator组件+自定义约束注解实现手机号码校验和密码格式限制
【SpringBoot】Validator组件+自定义约束注解实现手机号码校验和密码格式限制
118 1
|
13天前
|
Java 关系型数据库 MySQL
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
UWB (ULTRA WIDE BAND, UWB) 技术是一种无线载波通讯技术,它不采用正弦载波,而是利用纳秒级的非正弦波窄脉冲传输数据,因此其所占的频谱范围很宽。一套UWB精确定位系统,最高定位精度可达10cm,具有高精度,高动态,高容量,低功耗的应用。
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
|
14天前
|
存储 数据可视化 安全
Java全套智慧校园系统源码springboot+elmentui +Quartz可视化校园管理平台系统源码 建设智慧校园的5大关键技术
智慧校园指的是以物联网为基础的智慧化的校园工作、学习和生活一体化环境,这个一体化环境以各种应用服务系统为载体,将教学、科研、管理和校园生活进行充分融合。无处不在的网络学习、融合创新的网络科研、透明高效的校务治理、丰富多彩的校园文化、方便周到的校园生活。简而言之,“要做一个安全、稳定、环保、节能的校园。
39 6
|
2月前
|
Kubernetes Cloud Native Devops
云原生技术落地实现之二KubeSphere DevOps 系统在 Kubernetes 集群上实现springboot项目的自动部署和管理 CI/CD (2/2)
云原生技术落地实现之二KubeSphere DevOps 系统在 Kubernetes 集群上实现springboot项目的自动部署和管理 CI/CD (2/2)
55 1
|
2月前
|
JavaScript 前端开发 Java
基于SpringBoot和VUE技术的智慧生活商城系统设计与实现
基于SpringBoot和VUE技术的智慧生活商城系统设计与实现
|
4月前
|
Java 数据库连接 mybatis
JAVA框架技术之十八节springboot课件上手教程(二)
JAVA框架技术之十八节springboot课件上手教程
90 0
JAVA框架技术之十八节springboot课件上手教程(二)