首页 > 编程语言 >java链式脱敏

java链式脱敏

时间:2024-01-16 21:55:07浏览次数:30  
标签:return String List new 链式 java public 脱敏

//1.定义脱敏接口
public interface IReplaceMask {
    public  String maskStr(String str);
}
import java.util.regex.Matcher;
import java.util.regex.Pattern;
//2.邮箱脱敏实现脱敏接口
public class EmailMask implements IReplaceMask{
    public String maskStr(String email) {

        Pattern pattern = Pattern.compile("(\\w{3})\\w+([a-zA-Z0-9]{2}@[a-z]+\\.[a-z]+)", Pattern.CASE_INSENSITIVE);
        Matcher matcher = pattern.matcher(email);

        while (matcher.find()) {

            String group = matcher.group();
            String desensitizedEmail = group.replaceAll(".(?=.*[@])", "*");
            //System.out.println("原始邮箱地址:" + email);
            //System.out.println("脱敏后的邮箱地址:" + desensitizedEmail);
            email=email.replaceAll(group,desensitizedEmail);
            matcher = pattern.matcher(email);
        }
        return email;
    }
 

}
//3.手机号脱敏规则实现脱敏接口
public class PhoneMask implements  IReplaceMask{
    public String maskStr(String phoneNumber) {
        String regex = "(\\d{3})\\d{4}(\\d{4})";
        return phoneNumber.replaceAll(regex, "$1****$2");
    }
}
import java.util.ArrayList;
import java.util.List;
//4.脱敏工具类getInstaces包含了手机脱敏和邮箱脱敏,可扩展通过list.add(new 新的脱敏规则类()))
public class ReplaceMaskUtils {
    public static List<IReplaceMask> getInstaces() {
        List<IReplaceMask> list = new ArrayList<IReplaceMask>();
        list.add(new PhoneMask());
        list.add(new EmailMask());
        return list;
    }
}

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.sun.scenario.effect.impl.prism.PrImage;

import java.util.ArrayList;
import java.util.List;

public class 正则脱敏测试 {
    public static void main(String[] args) {

       //1.构造复杂数据结构开始
        List<Classes> classesList=new ArrayList<Classes>();
        Classes classes = new Classes();
        classes.setId("c1");
        classes.setName("n1");
        List<Student<QianBao>> stus = new ArrayList<Student<QianBao>>();
        classes.setStudents(stus);
        for (int i = 0; i < 3; i++) {
            Student<QianBao> student = new Student<QianBao>();
            student.setStuId("stuId" + i+" 18205943515");
            student.setStuName("stuName" + i+"[email protected]");
            QianBao q=new QianBao();
            q.setqId("stuId"+i+"的钱包ID 18205943512");
            q.setQn("stuName"+i+"的钱包Name [email protected]");
            student.setData1(q);
            stus.add(student);
        }
        classesList.add(classes);
        Result<Classes> result=new Result<Classes>();
        result.setData(classesList);
         //1.构造复杂数据结构结束

        //2.把复杂数据结构(嵌套泛型) 序列化成字符串
        String s = JSON.toJSONString(result);
        System.out.println(s);
        //3.对序列化字符串进行脱敏,内部使用链式设计模式,循环替换手机号、邮箱进行脱敏
        String string = maskString(s);
        System.out.println(string);

        //4.把脱敏后字符串还原成原先的数据结构
        Result<Classes> result1 = JSON.parseObject(string, new TypeReference<Result<Classes>>() {
        });
        String s1 = JSON.toJSONString(result1);
        //5.验证脱敏后的结构对JSON应字符串是否正确
        System.out.println("s1==string \t"+s1.equals(string));
    }


    private static String maskString(String str) {
        List<IReplaceMask> instaces = ReplaceMaskUtils.getInstaces();
        for (IReplaceMask instace : instaces) {
            str = instace.maskStr(str);
        }
        return str;
    }

    static class Result<T> {
        List<T> data;

        public List<T> getData() {
            return data;
        }

        public void setData(List<T> data) {
            this.data = data;
        }
    }

    static class Classes {
        private String id;
        private String name;
        private List<Student<QianBao>> students;

        public List<Student<QianBao>> getStudents() {
            return students;
        }

        public void setStudents(List<Student<QianBao>> students) {
            this.students = students;
        }

        public String getId() {
            return id;
        }

        public String getName() {
            return name;
        }

        public void setId(String id) {
            this.id = id;
        }

        public void setName(String name) {
            this.name = name;
        }
    }
    static class QianBao{
        private String qId;
        private String qn;

        public String getqId() {
            return qId;
        }

        public void setqId(String qId) {
            this.qId = qId;
        }

        public String getQn() {
            return qn;
        }

        public void setQn(String qn) {
            this.qn = qn;
        }
    }

    static class Student<T> {
        private T data1;

        public T getData1() {
            return data1;
        }

        public void setData1(T data1) {
            this.data1 = data1;
        }

        private String stuId;
        private String stuName;

        public String getStuId() {
            return stuId;
        }

        public void setStuId(String stuId) {
            this.stuId = stuId;
        }

        public String getStuName() {
            return stuName;
        }

        public void setStuName(String stuName) {
            this.stuName = stuName;
        }
    }


}

 

//1.定义脱敏接口 public interface IReplaceMask { public String maskStr(String str); } import java.util.regex.Matcher; import java.util.regex.Pattern; //2.邮箱脱敏实现脱敏接口 public class EmailMask implements IReplaceMask{ public String maskStr(String email) { Pattern pattern = Pattern.compile("(\\w{3})\\w+([a-zA-Z0-9]{2}@[a-z]+\\.[a-z]+)", Pattern.CASE_INSENSITIVE); Matcher matcher = pattern.matcher(email); while (matcher.find()) { String group = matcher.group(); String desensitizedEmail = group.replaceAll(".(?=.*[@])", "*"); //System.out.println("原始邮箱地址:" + email); //System.out.println("脱敏后的邮箱地址:" + desensitizedEmail); email=email.replaceAll(group,desensitizedEmail); matcher = pattern.matcher(email); } return email; } } //3.手机号脱敏规则实现脱敏接口 public class PhoneMask implements IReplaceMask{ public String maskStr(String phoneNumber) { String regex = "(\\d{3})\\d{4}(\\d{4})"; return phoneNumber.replaceAll(regex, "$1****$2"); } } import java.util.ArrayList; import java.util.List; //4.脱敏工具类getInstaces包含了手机脱敏和邮箱脱敏,可扩展通过list.add(new 新的脱敏规则类())) public class ReplaceMaskUtils { public static List<IReplaceMask> getInstaces() { List<IReplaceMask> list = new ArrayList<IReplaceMask>(); list.add(new PhoneMask()); list.add(new EmailMask()); return list; } } import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.TypeReference; import com.sun.scenario.effect.impl.prism.PrImage; import java.util.ArrayList; import java.util.List; public class 正则脱敏测试 { public static void main(String[] args) { //1.构造复杂数据结构开始 List<Classes> classesList=new ArrayList<Classes>(); Classes classes = new Classes(); classes.setId("c1"); classes.setName("n1"); List<Student<QianBao>> stus = new ArrayList<Student<QianBao>>(); classes.setStudents(stus); for (int i = 0; i < 3; i++) { Student<QianBao> student = new Student<QianBao>(); student.setStuId("stuId" + i+" 18205943515"); student.setStuName("stuName" + i+"[email protected]"); QianBao q=new QianBao(); q.setqId("stuId"+i+"的钱包ID 18205943512"); q.setQn("stuName"+i+"的钱包Name [email protected]"); student.setData1(q); stus.add(student); } classesList.add(classes); Result<Classes> result=new Result<Classes>(); result.setData(classesList); //1.构造复杂数据结构结束 //2.把复杂数据结构(嵌套泛型) 序列化成字符串 String s = JSON.toJSONString(result); System.out.println(s); //3.对序列化字符串进行脱敏,内部使用链式设计模式,循环替换手机号、邮箱进行脱敏 String string = maskString(s); System.out.println(string); //4.把脱敏后字符串还原成原先的数据结构 Result<Classes> result1 = JSON.parseObject(string, new TypeReference<Result<Classes>>() { }); String s1 = JSON.toJSONString(result1); //5.验证脱敏后的结构对JSON应字符串是否正确 System.out.println("s1==string \t"+s1.equals(string)); } private static String maskString(String str) { List<IReplaceMask> instaces = ReplaceMaskUtils.getInstaces(); for (IReplaceMask instace : instaces) { str = instace.maskStr(str); } return str; } static class Result<T> { List<T> data; public List<T> getData() { return data; } public void setData(List<T> data) { this.data = data; } } static class Classes { private String id; private String name; private List<Student<QianBao>> students; public List<Student<QianBao>> getStudents() { return students; } public void setStudents(List<Student<QianBao>> students) { this.students = students; } public String getId() { return id; } public String getName() { return name; } public void setId(String id) { this.id = id; } public void setName(String name) { this.name = name; } } static class QianBao{ private String qId; private String qn; public String getqId() { return qId; } public void setqId(String qId) { this.qId = qId; } public String getQn() { return qn; } public void setQn(String qn) { this.qn = qn; } } static class Student<T> { private T data1; public T getData1() { return data1; } public void setData1(T data1) { this.data1 = data1; } private String stuId; private String stuName; public String getStuId() { return stuId; } public void setStuId(String stuId) { this.stuId = stuId; } public String getStuName() { return stuName; } public void setStuName(String stuName) { this.stuName = stuName; } } }

标签:return,String,List,new,链式,java,public,脱敏
From: https://www.cnblogs.com/kexb/p/17968640

相关文章

  • java基础
    一:java概述:1991 年Sun公司的James Gosling等人开始开发名称为 Oak 的语言,希望用于控制嵌入在有线电视交换盒、PDA等的微处理器;1994年将Oak语言更名为Java;Java的三种技术架构:JAVAEE:Java Platform Enterprise Edition,开发企业环境下的应用程序,主要针对w......
  • java排序算法
    Java中常用的排序算法包括以下几种:冒泡排序(BubbleSort):这是一种简单的排序算法,通过重复地遍历待排序的序列,比较相邻的两个元素,如果它们的顺序错误就把它们交换过来。遍历序列的工作是重复地进行直到没有再需要交换,也就是说该序列已经排序完成。选择排序(SelectionSort):这种排序算法......
  • java使用whisper命令生成字幕文件
    Java使用Whisper命令生成字幕文件引言在日常生活中,我们经常会遇到需要生成字幕文件的情况,例如在制作视频时需要添加字幕。而Java作为一种强大的编程语言,可以通过调用命令行工具来实现生成字幕文件的功能。本文将介绍如何使用Java调用Whisper命令来生成字幕文件,并提供相应的代码示......
  • java怎么调用Stable Diffusion
    使用Java调用StableDiffusion的方案问题背景假设有一个实时数据流,需要使用StableDiffusion算法进行稳定的分发。你的任务是使用Java编写代码来调用StableDiffusion,并将数据正确地分发给不同的客户端。解决方案步骤1:安装StableDiffusion首先,需要安装StableDiffusion库。......
  • 16_Java基础-包
    包机制包=文件夹语法格式:packagepkg1[.pkg2[.pkg3…]];一般利用公司域名倒置作为包名:com.baidu.www域名:www.baidu.com为了能够使用一个包的成员,需要在Java中导入该包,用“import”完成importpackge1*(通配符):导入这个包下所有的类!推荐《阿里巴巴开发......
  • 14_Java基础-运算符4:条件运算符
    运算符***优先级()***扩展赋值运算符a+=b;//a=a+ba-=b;//a=a-b//偷懒时使用,尽量不用字符串链接:+先出现String,结果会拼接。后出现String,结果继续运算。条件运算符(必须掌握)x?y:z如果x=true,结果为y,否则结果为z。......
  • 使用 Picocli 开发 Java 命令行,5 分钟上手
    大家好,我是鱼皮,对不会前端的同学来说,开发命令行工具是一种不错的展示系统功能的方式。在Java中开发命令行工具也很简单,使用框架,几分钟就能学会啦~Picocli入门Picocli是Java中个人认为功能最完善、最简单易用的命令行开发框架,可以帮助大家快速开发命令行工具。网上有关Pico......
  • Java编码规范
    ......
  • 多线程(Java.Thread)学习(完结)
    多线程(Java.Thread)学习线程简介:1、线程是独立执行的路径2、程序运行时有很多后台进程比如主线程、young.gc、full.gc()3、main是主线程,系统入口,用于执行整个程序4、一个进程中、如果开辟多个线程,线程的运行由调度器安排调度、调度器的先后顺序不能人为干预5、对同一份资......
  • javascript node.js , java jvm , jdk, jre 的理解。
    网上的截图: 来看看node.js     再来看看java.     ......