日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁(yè) > 科技  > 軟件

SpringBoot + Sharding Sphere:輕松搞定數(shù)據(jù)加解密,支持字段級(jí)!

來(lái)源: 責(zé)編: 時(shí)間:2024-07-17 16:55:26 650觀看
導(dǎo)讀01、故事背景在實(shí)際的軟件系統(tǒng)開發(fā)過程中,由于業(yè)務(wù)的需求,在代碼層面實(shí)現(xiàn)數(shù)據(jù)的脫敏還是遠(yuǎn)遠(yuǎn)不夠的,往往還需要在數(shù)據(jù)庫(kù)層面針對(duì)某些關(guān)鍵性的敏感信息,例如:身份證號(hào)、銀行卡號(hào)、手機(jī)號(hào)、工資等信息進(jìn)行加密存儲(chǔ),實(shí)現(xiàn)真正意

01、故事背景

在實(shí)際的軟件系統(tǒng)開發(fā)過程中,由于業(yè)務(wù)的需求,在代碼層面實(shí)現(xiàn)數(shù)據(jù)的脫敏還是遠(yuǎn)遠(yuǎn)不夠的,往往還需要在數(shù)據(jù)庫(kù)層面針對(duì)某些關(guān)鍵性的敏感信息,例如:身份證號(hào)、銀行卡號(hào)、手機(jī)號(hào)、工資等信息進(jìn)行加密存儲(chǔ),實(shí)現(xiàn)真正意義的數(shù)據(jù)混淆脫敏,以滿足信息安全的需要。ZDP28資訊網(wǎng)——每日最新資訊28at.com

那在實(shí)際的業(yè)務(wù)開發(fā)過程中,我們?nèi)绾慰焖賹?shí)現(xiàn)呢?ZDP28資訊網(wǎng)——每日最新資訊28at.com

今天通過這篇文章,我們一起來(lái)了解一下如何在 Spring Boot 中快速實(shí)現(xiàn)數(shù)據(jù)的加解密功能。廢話不多說了,直接擼代碼!ZDP28資訊網(wǎng)——每日最新資訊28at.com

02、方案實(shí)踐

在 Spring Boot 生態(tài)中,有一個(gè)非常厲害的開源框架:Apache ShardingSphere。ZDP28資訊網(wǎng)——每日最新資訊28at.com

它是一款分布式 SQL 事務(wù)和查詢引擎,可通過數(shù)據(jù)分片、彈性伸縮、加密等能力對(duì)任意數(shù)據(jù)庫(kù)進(jìn)行增強(qiáng)。我們可以利用它的數(shù)據(jù)脫敏模塊,快速實(shí)現(xiàn) SQL 字段的加解密操作。ZDP28資訊網(wǎng)——每日最新資訊28at.com

如果當(dāng)前項(xiàng)目是采用 Spring Boot 開發(fā)的,可以實(shí)現(xiàn)無(wú)縫集成,對(duì)原系統(tǒng)的改造會(huì)非常少。ZDP28資訊網(wǎng)——每日最新資訊28at.com

下面以用戶表為例,一起了解一下ShardingSphere的數(shù)據(jù)加解密的實(shí)現(xiàn)過程!ZDP28資訊網(wǎng)——每日最新資訊28at.com

2.1、創(chuàng)建用戶表

首先,在數(shù)據(jù)庫(kù)中創(chuàng)建一張用戶表,示例腳本如下!ZDP28資訊網(wǎng)——每日最新資訊28at.com

CREATE TABLE user (  id bigint(20) NOT NULL COMMENT '用戶ID',  email varchar(255)  NOT NULL DEFAULT '' COMMENT '郵件',  nick_name varchar(255)  DEFAULT NULL COMMENT '昵稱',  pass_word varchar(255)  NOT NULL DEFAULT '' COMMENT '二次密碼',  reg_time varchar(255)  NOT NULL DEFAULT '' COMMENT '注冊(cè)時(shí)間',  user_name varchar(255)  NOT NULL DEFAULT '' COMMENT '用戶名',  salary varchar(255) DEFAULT NULL COMMENT '基本工資',  PRIMARY KEY (id) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

2.2、創(chuàng)建 springboot 項(xiàng)目并添加依賴包

接著,創(chuàng)建一個(gè) Spring Boot 項(xiàng)目,并添加相關(guān)的依賴包,示例如下:ZDP28資訊網(wǎng)——每日最新資訊28at.com

<dependencies>    <!--spring boot核心-->    <dependency>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter</artifactId>    </dependency>    <!--spring boot 測(cè)試-->    <dependency>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-test</artifactId>        <scope>test</scope>    </dependency>    <!--springmvc web-->    <dependency>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-web</artifactId>    </dependency>    <!--mysql 數(shù)據(jù)源-->    <dependency>        <groupId>mysql</groupId>        <artifactId>mysql-connector-java</artifactId>    </dependency>    <!--mybatis 支持-->    <dependency>        <groupId>org.mybatis.spring.boot</groupId>        <artifactId>mybatis-spring-boot-starter</artifactId>        <version>2.0.0</version>    </dependency>     <!--shardingsphere數(shù)據(jù)分片、脫敏工具-->    <dependency>        <groupId>org.apache.shardingsphere</groupId>        <artifactId>sharding-jdbc-spring-boot-starter</artifactId>        <version>4.1.0</version>    </dependency>    <dependency>        <groupId>org.apache.shardingsphere</groupId>        <artifactId>sharding-jdbc-spring-namespace</artifactId>        <version>4.1.0</version>    </dependency></dependencies>

2.3、添加相關(guān)配置

在application.properties文件中,添加shardingsphere相關(guān)配置,即可實(shí)現(xiàn)針對(duì)某個(gè)表進(jìn)行脫敏ZDP28資訊網(wǎng)——每日最新資訊28at.com

server.port=8080logging.path=log#shardingsphere數(shù)據(jù)源集成spring.shardingsphere.datasource.name=dsspring.shardingsphere.datasource.ds.type=com.zaxxer.hikari.HikariDataSourcespring.shardingsphere.datasource.ds.driver-class-name=com.mysql.cj.jdbc.Driverspring.shardingsphere.datasource.ds.jdbc-url=jdbc:mysql://127.0.0.1:3306/testspring.shardingsphere.datasource.ds.username=xxxxspring.shardingsphere.datasource.ds.password=xxxx#加密方式、密鑰配置spring.shardingsphere.encrypt.encryptors.encryptor_aes.type=aesspring.shardingsphere.encrypt.encryptors.encryptor_aes.props.aes.key.value=hkiqAXU6Ur5fixGHaO4Lb2V2ggausYwW#plainColumn表示明文列,cipherColumn表示脫敏列spring.shardingsphere.encrypt.tables.user.columns.salary.plainColumn=spring.shardingsphere.encrypt.tables.user.columns.salary.cipherColumn=salary#spring.shardingsphere.encrypt.tables.user.columns.pass_word.assistedQueryColumn=spring.shardingsphere.encrypt.tables.user.columns.salary.encryptor=encryptor_aes#sql打印spring.shardingsphere.props.sql.show=truespring.shardingsphere.props.query.with.cipher.column=true#基于xml方法的配置mybatis.mapper-locations=classpath:mapper/*.xml

其中有幾個(gè)的配置信息比較重要,spring.shardingsphere.encrypt.tables是指要脫敏的表,user是表名,salary表示user表中的真實(shí)列,其中plainColumn指的是明文列,cipherColumn指的是脫敏列,如果是新工程,只需要配置脫敏列即可!ZDP28資訊網(wǎng)——每日最新資訊28at.com

配置示例如下!ZDP28資訊網(wǎng)——每日最新資訊28at.com

# 用于告訴 ShardingSphere 數(shù)據(jù)表里哪個(gè)列用于存儲(chǔ)明文數(shù)據(jù)spring.shardingsphere.encrypt.tables.user.columns.salary.plainColumn=# 用于告訴 ShardingSphere 數(shù)據(jù)表里哪個(gè)列用于存儲(chǔ)密文數(shù)據(jù)spring.shardingsphere.encrypt.tables.user.columns.salary.cipherColumn=salary# 用于告訴 ShardingSphere 數(shù)據(jù)表里哪個(gè)列用于存儲(chǔ)輔助查詢數(shù)據(jù)#spring.shardingsphere.encrypt.tables.user.columns.salary.assistedQueryColumn=# 用于告訴 ShardingSphere 數(shù)據(jù)表里哪個(gè)列使用什么算法加解密spring.shardingsphere.encrypt.tables.user.columns.salary.encryptor=encryptor_aes

2.4、編寫數(shù)據(jù)持久層

然后,編寫一個(gè)數(shù)據(jù)持久層,用于數(shù)據(jù)的存儲(chǔ)和查詢操作。ZDP28資訊網(wǎng)——每日最新資訊28at.com

<mapper namespace="com.example.shardingsphere.mapper.UserMapperXml" >    <resultMap id="BaseResultMap" type="com.example.shardingsphere.entity.UserEntity" >        <id column="id" property="id" jdbcType="BIGINT" />        <result column="email" property="email" jdbcType="VARCHAR" />        <result column="nick_name" property="nickName" jdbcType="VARCHAR" />        <result column="pass_word" property="passWord" jdbcType="VARCHAR" />        <result column="reg_time" property="regTime" jdbcType="VARCHAR" />        <result column="user_name" property="userName" jdbcType="VARCHAR" />        <result column="salary" property="salary" jdbcType="VARCHAR" />    </resultMap>    <select id="findAll" resultMap="BaseResultMap">        SELECT * FROM user    </select>        <insert id="insert" parameterType="com.example.shardingsphere.entity.UserEntity">        INSERT INTO user(id,email,nick_name,pass_word,reg_time,user_name, salary)        VALUES(#{id},#{email},#{nickName},#{passWord},#{regTime},#{userName}, #{salary})    </insert></mapper>
public interface UserMapperXml {    /**     * 查詢所有的信息     * @return     */    List<UserEntity> findAll();    /**     * 新增數(shù)據(jù)     * @param user     */    void insert(UserEntity user);}
public class UserEntity {    private Long id;    private String email;    private String nickName;    private String passWord;    private String regTime;    private String userName;    private String salary;    //省略set、get...}

2.5、單元測(cè)試

最后,我們編寫一個(gè)單元測(cè)試,驗(yàn)證一下代碼的正確性。ZDP28資訊網(wǎng)——每日最新資訊28at.com

編寫啟用服務(wù)程序ZDP28資訊網(wǎng)——每日最新資訊28at.com

@SpringBootApplication@MapperScan("com.example.shardingsphere.mapper")public class ShardingSphereApplication {    public static void main(String[] args) {        SpringApplication.run(ShardingSphereApplication.class, args);    }}

編寫單元測(cè)試ZDP28資訊網(wǎng)——每日最新資訊28at.com

@RunWith(SpringJUnit4ClassRunner.class)@SpringBootTest(classes = ShardingSphereApplication.class)public class UserTest {    @Autowired    private UserMapperXml userMapperXml;    @Test    public void insert() throws Exception {        UserEntity entity = new UserEntity();        entity.setId(3l);        entity.setEmail("123@123.com");        entity.setNickName("阿三");        entity.setPassWord("123");        entity.setRegTime("2021-10-10 00:00:00");        entity.setUserName("張三");        entity.setSalary("2500");        userMapperXml.insert(entity);    }    @Test    public void query() throws Exception {        List<UserEntity> dataList = userMapperXml.findAll();        System.out.println(JSON.toJSONString(dataList));    }}

插入數(shù)據(jù)后,如下圖,數(shù)據(jù)庫(kù)存儲(chǔ)的數(shù)據(jù)已被加密!ZDP28資訊網(wǎng)——每日最新資訊28at.com

我們繼續(xù)來(lái)看看,運(yùn)行查詢服務(wù),結(jié)果如下圖,數(shù)據(jù)被成功解密!ZDP28資訊網(wǎng)——每日最新資訊28at.com

采用配置方式,最大的好處就是直接通過配置脫敏列就可以完成對(duì)某些數(shù)據(jù)表字段的脫敏,非常方便。ZDP28資訊網(wǎng)——每日最新資訊28at.com

三、小結(jié)

當(dāng)需要對(duì)某些數(shù)據(jù)表字段進(jìn)行脫敏處理的時(shí)候,可以采用 Apache ShardingSphere 框架快速實(shí)現(xiàn)。ZDP28資訊網(wǎng)——每日最新資訊28at.com

但是有個(gè)細(xì)節(jié)很容易遺漏,那就是字段類型,例如salary字段,根據(jù)常規(guī),很容易想到使用數(shù)字類型,但是卻不是,要知道加密之后的數(shù)據(jù)都是一串亂碼,數(shù)字類型肯定是無(wú)法存儲(chǔ)字符串的,因此在定義的時(shí)候,這個(gè)要留心一下。ZDP28資訊網(wǎng)——每日最新資訊28at.com

希望以上的案例,能幫助到大家!ZDP28資訊網(wǎng)——每日最新資訊28at.com

想要獲取項(xiàng)目源代碼的小伙伴,可以通過如下地址獲取!ZDP28資訊網(wǎng)——每日最新資訊28at.com

https://gitee.com/pzblogs/spring-boot-example-demo

本文鏈接:http://m.www897cc.com/showinfo-26-101382-0.htmlSpringBoot + Sharding Sphere:輕松搞定數(shù)據(jù)加解密,支持字段級(jí)!

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 如何利用負(fù)載均衡器實(shí)現(xiàn)終極自由

下一篇: 新的 HTML &lt;dialog&gt; 標(biāo)簽:絕對(duì)改變游戲規(guī)則

標(biāo)簽:
  • 熱門焦點(diǎn)
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
亚洲日本成人在线观看| 欧美成年人视频网站| 99精品欧美| 在线免费日韩片| 精品成人a区在线观看| 精品96久久久久久中文字幕无| 国产真实乱子伦精品视频| 欧美午夜激情小视频| 国产精品成人一区二区三区夜夜夜| 国产精品白丝jk黑袜喷水| 国产精品国产一区二区| 国产精品午夜电影| 国产视频精品xxxx| 在线观看福利一区| 亚洲破处大片| 一区二区日韩精品| 欧美亚洲一区二区在线| 久久久一区二区| 久热爱精品视频线路一| 欧美绝品在线观看成人午夜影视 | 狠狠狠色丁香婷婷综合久久五月 | 在线免费观看欧美| 亚洲免费观看高清完整版在线观看| 正在播放欧美一区| 亚洲毛片网站| 亚洲欧美日韩成人| 久久亚洲图片| 欧美日韩国产123| 国产麻豆一精品一av一免费| 激情成人av在线| 在线激情影院一区| 在线亚洲国产精品网站| 久久精品成人欧美大片古装| 欧美va天堂| 国产精品私房写真福利视频| 亚洲成色www8888| 一区二区三区四区五区精品| 午夜伦欧美伦电影理论片| 久久综合狠狠| 国产精品伦子伦免费视频| 一区精品久久| 亚洲一区二区成人| 久久婷婷久久一区二区三区| 欧美日韩亚洲一区二| 狠狠色综合一区二区| 中文精品在线| 久久美女性网| 国产精品观看| 亚洲国产第一| 欧美一级二级三级蜜桃| 欧美.日韩.国产.一区.二区| 国产精品久久久免费| 亚洲国产精选| 欧美在线免费观看| 欧美日韩中文字幕综合视频| 激情六月婷婷久久| 亚洲精品久久在线| 午夜免费日韩视频| 欧美精品色网| 国产欧美二区| 一二三区精品福利视频| 久久午夜羞羞影院免费观看| 欧美日韩国产在线| 亚洲成在人线av| 久久精品盗摄| 国产精品久久久久久久久久尿 | 一本色道久久综合亚洲精品不 | 91久久精品一区二区别| 久久都是精品| 国产精品99免费看 | 美女尤物久久精品| 国产日韩成人精品| 洋洋av久久久久久久一区| 久久亚洲捆绑美女| 国产视频在线一区二区| 亚洲午夜在线视频| 欧美乱大交xxxxx| 在线看欧美日韩| 亚洲男女自偷自拍图片另类| 欧美激情精品久久久久久蜜臀| 国产午夜精品视频免费不卡69堂| 一区二区日韩免费看| 免费久久99精品国产| 国产专区欧美专区| 亚洲欧美一区二区三区久久 | 在线亚洲+欧美+日本专区| 久久精品人人做人人综合| 国产精品网站在线| 亚洲性夜色噜噜噜7777| 欧美日韩国产高清视频| 亚洲欧洲日本专区| 久久狠狠亚洲综合| 国产乱码精品| 亚洲最新中文字幕| 欧美日韩一卡| 亚洲综合视频一区| 国产欧美日韩在线播放| 久久精品在这里| 亚洲电影第1页| 欧美精品www| 亚洲一区二区日本| 国产亚洲激情视频在线| 久久久久久噜噜噜久久久精品| 尤物视频一区二区| 欧美日本精品| 亚洲影院色无极综合| 国产亚洲成年网址在线观看| 美女日韩在线中文字幕| 99国产精品久久久久久久| 国产精品久久久一区麻豆最新章节| 欧美一区二区三区久久精品茉莉花| 国内精品一区二区| 欧美激情视频网站| 亚洲一区自拍| 黄色成人av在线| 欧美日韩国产不卡| 午夜在线电影亚洲一区| 亚洲第一精品久久忘忧草社区| 欧美日韩ab片| 欧美在线日韩在线| 亚洲精品乱码久久久久| 国产精品三区www17con| 久久综合九色综合网站| 日韩一二在线观看| 国产嫩草一区二区三区在线观看| 久久一二三区| 中国日韩欧美久久久久久久久| 国产九九精品视频| 欧美岛国激情| 欧美尤物一区| 99视频精品| 极品裸体白嫩激情啪啪国产精品| 欧美日韩八区| 久久久久成人精品| 99综合在线| 激情欧美日韩| 国产精品激情| 欧美www在线| 校园激情久久| 日韩视频在线免费观看| 国内精品久久久久久久影视麻豆| 欧美久久影院| 久久久一二三| 午夜一级久久| 一本色道婷婷久久欧美| 激情欧美一区二区三区在线观看| 欧美日韩一区二区三区四区在线观看 | 91久久国产综合久久| 国产免费观看久久黄| 欧美日韩国产一级| 久久久久久亚洲精品中文字幕| 亚洲午夜精品久久久久久浪潮 | 99爱精品视频| 伊人男人综合视频网| 国产精品一区二区在线观看| 欧美精品色综合| 久久三级视频| 西西人体一区二区| 中日韩午夜理伦电影免费| 亚洲第一网站| 国模精品一区二区三区色天香| 欧美日韩在线播放三区| 欧美成人在线免费观看| 久久久国产91| 午夜精品亚洲| 宅男精品导航| 亚洲伦伦在线| 亚洲欧洲一区二区三区| 狠狠综合久久av一区二区小说| 国产精品一级在线| 欧美视频二区| 欧美日韩精品免费看| 欧美成人高清视频| 久久综合狠狠| 久久精品国产91精品亚洲| 亚洲综合色激情五月| 一区二区三欧美| 亚洲精品中文在线| 亚洲国产成人在线播放| 136国产福利精品导航网址| 国产自产高清不卡| 国产免费观看久久黄| 国产精品亚洲成人| 国产精品国产| 欧美午夜精品| 国产精品成人免费| 欧美日韩综合另类| 欧美日韩亚洲激情| 欧美日韩国产区一| 欧美精品三级在线观看| 欧美激情在线免费观看| 欧美精品激情在线观看| 欧美精品乱人伦久久久久久| 欧美成人免费网| 欧美成熟视频| 欧美电影免费网站| 欧美国产在线电影| 欧美激情第二页| 欧美国产日韩一区二区在线观看 | 欧美成人一区二区三区片免费| 女同一区二区| 欧美精品videossex性护士| 欧美精品三级| 欧美日韩一区在线播放|