最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot+?Sharding?Sphere?輕松實現數據庫字段加解密功能

 更新時間:2024年07月23日 09:02:52   作者:潘志的研發(fā)筆記  
在Spring?Boot生態(tài)中,有一個非常厲害的開源框架:Apache?ShardingSphere,它是一款分布式?SQL?事務和查詢引擎,可通過數據分片、彈性伸縮、加密等能力對任意數據庫進行增強,今天通過這篇文章,我們一起來了解一下如何在?Spring?Boot?中快速實現數據的加解密功能

一、介紹

在實際的軟件系統(tǒng)開發(fā)過程中,由于業(yè)務的需求,在代碼層面實現數據的脫敏還是遠遠不夠的,往往還需要在數據庫層面針對某些關鍵性的敏感信息,例如:身份證號、銀行卡號、手機號、工資等信息進行加密存儲,實現真正意義的數據混淆脫敏,以滿足信息安全的需要。

那在實際的業(yè)務開發(fā)過程中,我們如何快速實現呢?

今天通過這篇文章,我們一起來了解一下如何在 Spring Boot 中快速實現數據的加解密功能。廢話不多說了,直接擼代碼!

二、方案實踐

在 Spring Boot 生態(tài)中,有一個非常厲害的開源框架:Apache ShardingSphere。

它是一款分布式 SQL 事務和查詢引擎,可通過數據分片、彈性伸縮、加密等能力對任意數據庫進行增強。我們可以利用它的數據脫敏模塊,快速實現 SQL 字段的加解密操作。

如果當前項目是采用 Spring Boot 開發(fā)的,可以實現無縫集成,對原系統(tǒng)的改造會非常少。

下面以用戶表為例,一起了解一下ShardingSphere的數據加解密的實現過程!

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

首先,在數據庫中創(chuàng)建一張用戶表,示例腳本如下!

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 '注冊時間',
  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 項目并添加依賴包

接著,創(chuàng)建一個 Spring Boot 項目,并添加相關的依賴包,示例如下:

<dependencies>
    <!--spring boot核心-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <!--spring boot 測試-->
    <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 數據源-->
    <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數據分片、脫敏工具-->
    <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、添加相關配置

application.properties文件中,添加shardingsphere相關配置,即可實現針對某個表進行脫敏

server.port=8080
logging.path=log
#shardingsphere數據源集成
spring.shardingsphere.datasource.name=ds
spring.shardingsphere.datasource.ds.type=com.zaxxer.hikari.HikariDataSource
spring.shardingsphere.datasource.ds.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.ds.jdbc-url=jdbc:mysql://127.0.0.1:3306/test
spring.shardingsphere.datasource.ds.username=xxxx
spring.shardingsphere.datasource.ds.password=xxxx
#加密方式、密鑰配置
spring.shardingsphere.encrypt.encryptors.encryptor_aes.type=aes
spring.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=true
spring.shardingsphere.props.query.with.cipher.column=true
#基于xml方法的配置
mybatis.mapper-locations=classpath:mapper/*.xml

其中有幾個的配置信息比較重要,spring.shardingsphere.encrypt.tables是指要脫敏的表,user是表名,salary表示user表中的真實列,其中plainColumn指的是明文列,cipherColumn指的是脫敏列,如果是新工程,只需要配置脫敏列即可!

配置示例如下!

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

2.4、編寫數據持久層

然后,編寫一個數據持久層,用于數據的存儲和查詢操作。

<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();
    /**
     * 新增數據
     * @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、單元測試

最后,我們編寫一個單元測試,驗證一下代碼的正確性。

編寫啟用服務程序

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

編寫單元測試

@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));
    }
}

插入數據后,如下圖,數據庫存儲的數據已被加密!

我們繼續(xù)來看看,運行查詢服務,結果如下圖,數據被成功解密!

采用配置方式,最大的好處就是直接通過配置脫敏列就可以完成對某些數據表字段的脫敏,非常方便。

三、小結

當需要對某些數據表字段進行脫敏處理的時候,可以采用 Apache ShardingSphere 框架快速實現。

但是有個細節(jié)很容易遺漏,那就是字段類型,例如salary字段,根據常規(guī),很容易想到使用數字類型,但是卻不是,要知道加密之后的數據都是一串亂碼,數字類型肯定是無法存儲字符串的,因此在定義的時候,這個要留心一下。

希望以上的案例,能幫助到大家!

示例代碼:spring-boot-example-shardingsphere

到此這篇關于SpringBoot+ Sharding Sphere 輕松實現數據庫字段加解密的文章就介紹到這了,更多相關SpringBoot Sharding Sphere 數據庫字段加解密內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • SpringBoot配置SLF4J日志全過程

    SpringBoot配置SLF4J日志全過程

    這篇文章主要介紹了SpringBoot配置SLF4J日志全過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • logback-spring.xml配置詳解

    logback-spring.xml配置詳解

    這篇文章主要介紹了logback-spring.xml詳解,本文介紹了logback-spring.xml相關的知識與概念,結合實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-07-07
  • javaweb圖書商城設計之圖書模塊(4)

    javaweb圖書商城設計之圖書模塊(4)

    這篇文章主要介紹了javaweb圖書商城設計之圖書模塊的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • SpringSecurity中的UserDetailsService深度解析

    SpringSecurity中的UserDetailsService深度解析

    文章介紹了Spring Security中的UserDetailsService接口,它用于自定義用戶認證邏輯,通過實現該接口,可以自定義用戶認證過程,文章詳細解釋了UserDetailsService接口的返回值、方法參數以及可能出現的異常,如UsernameNotFoundException,感興趣的朋友跟隨小編一起看看吧
    2025-11-11
  • Spring Security自定義認證器的實現代碼

    Spring Security自定義認證器的實現代碼

    這篇文章主要介紹了Spring Security自定義認證器的實現代碼,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • Java設計模式之策略模式詳細解析

    Java設計模式之策略模式詳細解析

    這篇文章主要介紹了Java設計模式之策略模式詳細解析,策略模式中,定義算法族,分別封裝起來,讓他們之間可以相互轉化,此模式讓算法的變化獨立于使用算法的客戶,需要的朋友可以參考下
    2023-11-11
  • springboot日期轉換器實現實例解析

    springboot日期轉換器實現實例解析

    這篇文章主要介紹了springboot日期轉換器實現實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12
  • Java微信公眾平臺開發(fā)(13) 微信JSSDK中Config配置

    Java微信公眾平臺開發(fā)(13) 微信JSSDK中Config配置

    這篇文章主要為大家詳細介紹了Java微信公眾平臺開發(fā)第十三步,微信JSSDK中Config配置,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • 查看jdk(java開發(fā)工具包)安裝路徑的兩種方法

    查看jdk(java開發(fā)工具包)安裝路徑的兩種方法

    若已經安裝好了jdk(java開發(fā)工具包),也配置了環(huán)境變量,事后卻忘了安裝路徑在哪,如何查看jdk安裝路徑?本文給大家介紹了兩種查看jdk(java開發(fā)工具包)安裝路徑的方法,需要的朋友可以參考下
    2023-12-12
  • 數據定位在java購物車系統(tǒng)中的應用

    數據定位在java購物車系統(tǒng)中的應用

    實現"加入購物車"功能,數據定位至關重要,它通過用戶ID和商品ID等標識符實現快速查詢和數據一致性,主鍵、外鍵和聯合索引等數據庫技術,以及Redis緩存和并發(fā)控制策略如樂觀鎖或分布式鎖,共同保障了購物車系統(tǒng)的查詢效率和數據安全,這些機制對高并發(fā)和大數據量的場景尤為重要
    2024-10-10

最新評論

通江县| 高台县| 拉孜县| 邢台市| 岑溪市| 常山县| 内乡县| 鲁山县| 和顺县| 阿尔山市| 荆州市| 叶城县| 江达县| 绿春县| 玉田县| 青海省| 玉门市| 巨野县| 丰县| 门头沟区| 白河县| 鲁山县| 和静县| 随州市| 青神县| 枣庄市| 永济市| 什邡市| 德惠市| 新竹县| 淅川县| 永靖县| 秭归县| 杭锦旗| 德州市| 庆城县| 汉川市| 星座| 成武县| 高雄县| 桦甸市|