0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

SQL/JAVA/mybatisplus数据脱敏实现原理

Android编程精选 来源:CSDN技术社区 作者:y小恒 2022-06-14 17:09 次阅读

1.SQL数据脱敏实现

MYSQL(电话号码,身份证)数据脱敏的实现

--CONCAT()、LEFT()和RIGHT()字符串函数组合使用,请看下面具体实现

-- CONCAT(str1,str2,…):返回结果为连接参数产生的字符串
-- LEFT(str,len):返回从字符串str 开始的len 最左字符
-- RIGHT(str,len):从字符串str 开始,返回最右len 字符

--电话号码脱敏sql:

SELECTmobilePhoneAS脱敏前电话号码,CONCAT(LEFT(mobilePhone,3),'********')AS脱敏后电话号码FROMt_s_user

--身份证号码脱敏sql:

SELECTidcardAS未脱敏身份证,CONCAT(LEFT(idcard,3),'****',RIGHT(idcard,4))AS脱敏后身份证号FROMt_s_user

2.JAVA数据脱敏实现

可参考:海强 / sensitive-plus

数据脱敏插件,目前支持地址脱敏、银行卡号脱敏、中文姓名脱敏、固话脱敏、身份证号脱敏、手机号脱敏、密码脱敏 一个是正则脱敏、另外一个根据显示长度脱敏,默认是正则脱敏,可以根据自己的需要配置自己的规则。

3.mybatis-mate-sensitive-jackson

mybatisplus 的新作,可以测试使用,生产需要收费。

根据定义的策略类型,对数据进行脱敏,当然策略可以自定义。

#目前已有
packagemybatis.mate.strategy;

publicinterfaceSensitiveType{
StringchineseName="chineseName";
StringidCard="idCard";
Stringphone="phone";
Stringmobile="mobile";
Stringaddress="address";
Stringemail="email";
StringbankCard="bankCard";
Stringpassword="password";
StringcarNumber="carNumber";
}

Demo 代码目录

94c86e5c-ddb1-11ec-ba43-dac502259ad0.png

1、pom.xml


<projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>com.baomidougroupId>
<artifactId>mybatis-mate-examplesartifactId>
<version>0.0.1-SNAPSHOTversion>
parent>
<modelVersion>4.0.0modelVersion>
<artifactId>mybatis-mate-sensitive-jacksonartifactId>
<dependencies>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
dependency>
dependencies>

project>

2、appliation.yml

#DataSourceConfig
spring:
datasource:
#driver-class-name:org.h2.Driver
#schema:classpath:db/schema-h2.sql
#data:classpath:db/data-h2.sql
#url:jdbcmem:test
#username:root
#password:test
driver-class-name:com.mysql.cj.jdbc.Driver
url:jdbc//localhost:3306/mybatis_mate?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
username:root
password:123456
#MybatisMate配置
mybatis-mate:
cert:
#请添加微信wx153666购买授权,不白嫖从我做起!测试证书会失效,请勿正式环境使用
grant:thisIsTestLicense
license:as/bsBaSVrsA9FfjC/N77ruEt2/QZDrW+MHETNuEuZBra5mlaXZU+DE1ZvF8UjzlLCpH3TFVH3WPV+Ya7Ugiz1Rx4wSh/FK6Ug9lhos7rnsNaRB/+mR30aXqtlLt4dAmLAOCT56r9mikW+t1DDJY8TVhERWMjEipbqGO9oe1fqYCegCEX8tVCpToKr5J1g1V86mNsNnEGXujnLlEw9jBTrGxAyQroD7Ns1Dhwz1K4Y188mvmRQp9t7OYrpgsC7N9CXq1s1c2GtvfItHArkqHE4oDrhaPjpbMjFWLI5/XqZDtW3D+AVcH7pTcYZn6vzFfDZEmfDFV5fQlT3Rc+GENEg==

#LoggerConfig
logging:
level:
mybatis.mate:debug

3、Appliation启动类

packagemybatis.mate.sensitive.jackson;

importorg.springframework.boot.SpringApplication;
importorg.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
publicclassSensitiveJacksonApplication{

//测试访问http://localhost:8080/info,http://localhost:8080/list
publicstaticvoidmain(String[]args){
SpringApplication.run(SensitiveJacksonApplication.class,args);
}
}

4、配置类,自定义脱敏策略

packagemybatis.mate.sensitive.jackson.config;

importmybatis.mate.databind.ISensitiveStrategy;
importmybatis.mate.strategy.SensitiveStrategy;
importorg.springframework.context.annotation.Bean;
importorg.springframework.context.annotation.Configuration;

@Configuration
publicclassSensitiveStrategyConfig{

/**
*注入脱敏策略
*/
@Bean
publicISensitiveStrategysensitiveStrategy(){
//自定义testStrategy类型脱敏处理
returnnewSensitiveStrategy().addStrategy("testStrategy",t->t+"***test***");
}
}

5、业务类

User,注解标识脱敏字段,及选用脱敏策略

packagemybatis.mate.sensitive.jackson.entity;

importlombok.Getter;
importlombok.Setter;
importmybatis.mate.annotation.FieldSensitive;
importmybatis.mate.sensitive.jackson.config.SensitiveStrategyConfig;
importmybatis.mate.strategy.SensitiveType;

@Getter
@Setter
publicclassUser{
privateLongid;
/**
*这里是一个自定义的策略{@linkSensitiveStrategyConfig}初始化注入
*/
@FieldSensitive("testStrategy")
privateStringusername;
/**
*默认支持策略{@linkSensitiveType}
*/
@FieldSensitive(SensitiveType.mobile)
privateStringmobile;
@FieldSensitive(SensitiveType.email)
privateStringemail;

}

UserController

packagemybatis.mate.sensitive.jackson.controller;

importmybatis.mate.databind.ISensitiveStrategy;
importmybatis.mate.databind.RequestDataTransfer;
importmybatis.mate.sensitive.jackson.entity.User;
importmybatis.mate.sensitive.jackson.mapper.UserMapper;
importmybatis.mate.strategy.SensitiveType;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.web.bind.annotation.GetMapping;
importorg.springframework.web.bind.annotation.RestController;

importjavax.servlet.http.HttpServletRequest;
importjava.util.HashMap;
importjava.util.List;
importjava.util.Map;

@RestController
publicclassUserController{
@Autowired
privateUserMapperuserMapper;
@Autowired
privateISensitiveStrategysensitiveStrategy;

//测试访问http://localhost:8080/info
@GetMapping("/info")
publicUserinfo(){
returnuserMapper.selectById(1L);
}

//测试返回map访问http://localhost:8080/map
@GetMapping("/map")
publicMapmap(){
//测试嵌套对象脱敏
MapuserMap=newHashMap<>();
userMap.put("user",userMapper.selectById(1L));
userMap.put("test",123);
userMap.put("userMap",newHashMap(){{
put("user2",userMapper.selectById(2L));
put("test2","hichina");
}});
//手动调用策略脱敏
userMap.put("mobile",sensitiveStrategy.getStrategyFunctionMap()
.get(SensitiveType.mobile).apply("15315388888"));
returnuserMap;
}

//测试访问http://localhost:8080/list
//不脱敏http://localhost:8080/list?skip=1
@GetMapping("/list")
publicListlist(HttpServletRequestrequest){
if("1".equals(request.getParameter("skip"))){
//跳过脱密处理
RequestDataTransfer.skipSensitive();
}
returnuserMapper.selectList(null);
}
}

UserMapper

packagemybatis.mate.sensitive.jackson.mapper;

importcom.baomidou.mybatisplus.core.mapper.BaseMapper;
importmybatis.mate.sensitive.jackson.entity.User;
importorg.apache.ibatis.annotations.Mapper;

@Mapper
publicinterfaceUserMapperextendsBaseMapper<User>{

}

6、测试

GET http://localhost:8080/list

[
{
"id":1,
"username":"Jone***test***",
"mobile":"153******81",
"email":"t****@baomidou.com"
},
{
"id":2,
"username":"Jack***test***",
"mobile":"153******82",
"email":"t****@baomidou.com"
},
{
"id":3,
"username":"Tom***test***",
"mobile":"153******83",
"email":"t****@baomidou.com"
}
]

GET http://localhost:8080/list?skip=1

[
{
"id":1,
"username":"Jone",
"mobile":"15315388881",
"email":"test1@baomidou.com"
},
{
"id":2,
"username":"Jack",
"mobile":"15315388882",
"email":"test2@baomidou.com"
},
{
"id":3,
"username":"Tom",
"mobile":"15315388883",
"email":"test3@baomidou.com"
}
]

原文标题:3种常见的数据脱敏方案

文章出处:【微信公众号:Android编程精选】欢迎添加关注!文章转载请注明出处。

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据
    +关注

    关注

    8

    文章

    6633

    浏览量

    87988
  • JAVA
    +关注

    关注

    19

    文章

    2924

    浏览量

    103494
  • SQL
    SQL
    +关注

    关注

    1

    文章

    745

    浏览量

    43777

原文标题:3种常见的数据脱敏方案

文章出处:【微信号:AndroidPush,微信公众号:Android编程精选】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    SQL语言实现数据库记录的查询

    绝大部分DBMS都支持SQL语言,LabVIEW数据库工具包实现的实质也是基于SQL语言,它为不熟悉SQL语言的用户把
    发表于 07-01 21:25

    实现 Labview 和SQL server进行数据的读取和写入

    我想实现以下功能:Labview读取SQL server中的一个表格,鼠标点击选中某一行,此行处于被选中状态(颜色变深),点击保存按钮,将实时数组中的数据存入此行,并写入SQL ser
    发表于 09-07 09:25

    如何使用Java Web防范SQL 注入攻击的资料说明

    网络的广泛应用给社会带来极大便捷,网络安全特别是SQL 注入也成为了一个倍受关注的问题。与此同时,Java Web 由于其平台无关性、“一次编写、随处运行”,使得越来越多的程序员加入到Java 当中。本文在分析了
    发表于 02-26 15:59 12次下载
    如何使用<b class='flag-5'>Java</b> Web防范<b class='flag-5'>SQL</b> 注入攻击的资料说明

    使用java语言导入SQL到MySql的源代码免费下载

    本文档的主要内容详细介绍的是使用java语言导入SQL到MySql的源代码免费下载。
    发表于 09-23 16:38 3次下载
    使用<b class='flag-5'>java</b>语言导入<b class='flag-5'>SQL</b>到MySql的源代码免费下载

    RushOrm将java类映射到SQL表来取代对SQL的需求

    RushOrm 通过将 java 类映射到 SQL 表来取代对 SQL 的需求。 为什么要编写 RushOrm? 复杂的关系 - RushObjects 支持其他 RushObjects 的列表
    发表于 04-13 09:59 2次下载

    数据脱敏技术定义及实施过程解析

    数据脱敏数据安全领域落地场景较为成熟的技术手段,在数据深层次、大范围的共享开放的今天,数据脱敏
    的头像 发表于 11-16 10:26 2517次阅读

    如何实现SpringBoot项目中的隐私数据脱敏

    数据脱敏:把系统里的一些敏感数据进行加密处理后再返回,达到保护隐私作用
    的头像 发表于 01-08 10:25 1558次阅读

    Java中如何解析、格式化、生成SQL语句?

    昨天在群里看到有小伙伴问,Java里如何解析SQL语句然后格式化SQL,是否有现成类库可以使用?
    的头像 发表于 04-10 11:59 721次阅读

    如何实现一个注解进行数据脱敏

      什么是数据脱敏 开胃菜 使用 Hutool 工具类实现数据掩码 使用 Jackson 进行数据序列化
    的头像 发表于 06-14 09:37 766次阅读
    如何<b class='flag-5'>实现</b>一个注解进行<b class='flag-5'>数据</b><b class='flag-5'>脱敏</b>

    什么是数据脱敏?常用的脱敏规则有哪些呢?

    数据脱敏,指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护。
    的头像 发表于 08-15 10:04 1.8w次阅读
    什么是<b class='flag-5'>数据</b><b class='flag-5'>脱敏</b>?常用的<b class='flag-5'>脱敏</b>规则有哪些呢?

    什么是SQL注入?Java项目防止SQL注入方式总结

    SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作
    的头像 发表于 09-25 10:43 572次阅读
    什么是<b class='flag-5'>SQL</b>注入?<b class='flag-5'>Java</b>项目防止<b class='flag-5'>SQL</b>注入方式总结

    什么是SQL注入?Java项目防止SQL注入方式

    Java项目防止SQL注入方式 这里总结4种: PreparedStatement防止SQL注入 mybatis中#{}防止SQL注入 对请求参数的敏感词汇进行过滤 ngin
    发表于 10-16 14:26 336次阅读

    SpringBoot采用JsonSerializer和Aop实现可控制的数据脱敏

    的确实现数据脱敏,但是有个问题现在的脱敏针对的是 只要对该实体类进行了使用返回的接口,中的数据都会进行
    的头像 发表于 11-06 16:15 855次阅读
    SpringBoot采用JsonSerializer和Aop<b class='flag-5'>实现</b>可控制的<b class='flag-5'>数据</b><b class='flag-5'>脱敏</b>

    java对clob类型数据怎么处理

    字符串、大型文档等。 首先,我们需要通过JDBC连接到数据库。以下是一个简单的示例代码,展示了如何连接到数据库: import java.sql.Connection; import
    的头像 发表于 11-21 10:35 604次阅读

    数据脱敏的3种常见方案,好用到爆!

    数据脱敏插件,目前支持地址脱敏、银行卡号脱敏、中文姓名脱敏、固话脱敏、身份证号
    的头像 发表于 02-25 16:14 801次阅读
    <b class='flag-5'>数据</b><b class='flag-5'>脱敏</b>的3种常见方案,好用到爆!