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

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

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

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

使用mysql SUBSTRING函数

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

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

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

方法二:基于注解实现

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<Stringimplements 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进行手机号脱敏的功能。用户的隐私得到了有效保护,同时保持了应用程序的正常。展示结果如下:保护隐私安全,springboot手机号脱敏技术助你无忧通信

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


原文始发于微信公众号(修己xj):保护隐私安全,springboot手机号脱敏技术助你无忧通信

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/168640.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!