SpringBoot整合ShardingSphere5.x實(shí)現(xiàn)數(shù)據(jù)加解密功能(最新推薦)
環(huán)境:Springboot2.6.14 + ShardingSphere5.3.0
準(zhǔn)備環(huán)境
添加依賴(lài)
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>shardingsphere-jdbc-core</artifactId>
<version>${shardingsphere.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>數(shù)據(jù)表users

pwd:明文字段
pwd_clipher:密文字段
assisted_query_pwd:查詢(xún)輔助列
配置文件
application.yml配置文件(Springboot)
spring:
datasource:
driverClassName: org.apache.shardingsphere.driver.ShardingSphereDriver
url: jdbc:shardingsphere:classpath:config.yaml
name: EncryptHikariCP
---
mybatis-plus:
configuration:
mapUnderscoreToCamelCase: true
mapperLocations: classpath*:/mapper/**/*.xml
typeAliasesPackage: com.packconfig.yaml配置文件(ShardingSphere)
#數(shù)據(jù)源配置
dataSources:
ds1:
dataSourceClassName: com.zaxxer.hikari.HikariDataSource
driverClassName: com.mysql.cj.jdbc.Driver
jdbcUrl: jdbc:mysql://localhost:3306/testjpa?serverTimezone=GMT%2B8&useSSL=false
username: root
password: 123123
minimumIdle: 10
maximumPoolSize: 200
autoCommit: true
idleTimeout: 30000
poolName: MasterHikariCP
maxLifetime: 1800000
connectionTimeout: 30000
connectionTestQuery: SELECT 1
#規(guī)則配置
rules:
- !ENCRYPT #加解密相關(guān)配置
tables:
users:
columns:
pwd: #邏輯列(如果是老系統(tǒng)一般都會(huì)吧這個(gè)邏輯列和實(shí)際物理列名一致)
plainColumn: pwd #實(shí)際物理列名
cipherColumn: pwd_cipher #加密后的列名
encryptorName: pwd_encryptor #加密列使用的加密算法(對(duì)應(yīng)下面的配置)
#assistedQueryColumn: assisted_query_pwd
#assistedQueryEncryptorName: assisted_encryptor
queryWithCipherColumn: true
encryptors:
pwd_encryptor:
type: SM4
props:
sm4-key: aaaabbbbccccdddd1111222233334444
sm4-mode: ECB
sm4-iv: aabbccddeeffgghh
sm4-padding: PKCS7Padding
assisted_encryptor:
type: SM3
props:
sm3-salt: aaaabbbb
#執(zhí)行時(shí)打印SQL
props:
sql-show: true 有了上面配置后,接下來(lái)就可以進(jìn)行相應(yīng)的CRUD操作了。
CRUD操作
實(shí)體對(duì)象
#數(shù)據(jù)源配置
dataSources:
ds1:
dataSourceClassName: com.zaxxer.hikari.HikariDataSource
driverClassName: com.mysql.cj.jdbc.Driver
jdbcUrl: jdbc:mysql://localhost:3306/testjpa?serverTimezone=GMT%2B8&useSSL=false
username: root
password: 123123
minimumIdle: 10
maximumPoolSize: 200
autoCommit: true
idleTimeout: 30000
poolName: MasterHikariCP
maxLifetime: 1800000
connectionTimeout: 30000
connectionTestQuery: SELECT 1
#規(guī)則配置
rules:
- !ENCRYPT #加解密相關(guān)配置
tables:
users:
columns:
pwd: #邏輯列(如果是老系統(tǒng)一般都會(huì)吧這個(gè)邏輯列和實(shí)際物理列名一致)
plainColumn: pwd #實(shí)際物理列名
cipherColumn: pwd_cipher #加密后的列名
encryptorName: pwd_encryptor #加密列使用的加密算法(對(duì)應(yīng)下面的配置)
#assistedQueryColumn: assisted_query_pwd
#assistedQueryEncryptorName: assisted_encryptor
queryWithCipherColumn: true
encryptors:
pwd_encryptor:
type: SM4
props:
sm4-key: aaaabbbbccccdddd1111222233334444
sm4-mode: ECB
sm4-iv: aabbccddeeffgghh
sm4-padding: PKCS7Padding
assisted_encryptor:
type: SM3
props:
sm3-salt: aaaabbbb
#執(zhí)行時(shí)打印SQL
props:
sql-show: true Mapper類(lèi)
public interface UsersMapper extends BaseMapper<Users> {
}測(cè)試類(lèi)
@SpringBootTest
public class UserMapperTest {
@Resource
private UsersMapper usersMapper ;
@Resource
private IUsersService us ;
@Resource
private List<DataSource> dataSources ;
@Test
public void testUserList() {
QueryWrapper<Users> queryWrapper = new QueryWrapper<>() ;
queryWrapper.eq("pwd", "999999") ;
System.out.println(this.usersMapper.selectList(queryWrapper)) ;
}
@Test
public void testSave() {
Users user = new Users() ;
user.setAge(99) ;
user.setEmail("99999@qq.com") ;
user.setIdNo("999999") ;
user.setName("久久") ;
user.setPwd("999999") ;
this.usersMapper.insert(user) ;
}
}測(cè)試結(jié)果

數(shù)據(jù)源及查詢(xún)輔助列
數(shù)據(jù)源配置
在config.yaml文件中我們配置了連接池信息,但是實(shí)際沒(méi)有生效。如上配置的最小連接數(shù)是10,最大是200,但是實(shí)際打印都成了默認(rèn)值都是10。最后修改連接池配置方式如下:
spring:
datasource:
driverClassName: org.apache.shardingsphere.driver.ShardingSphereDriver
url: jdbc:shardingsphere:classpath:config.yaml
name: EncryptHikariCP
hikari:
minimumIdle: 10
maximumPoolSize: 200
autoCommit: true
idleTimeout: 30000
poolName: BaseHikariCP
maxLifetime: 1800000
connectionTimeout: 30000
connectionTestQuery: SELECT 1如上配置后連接池才正常。
輔助查詢(xún)列
輔助查詢(xún)列會(huì)根據(jù)你的配置是否使用輔助列,當(dāng)沒(méi)有配置輔助查詢(xún)列時(shí),執(zhí)行SQL如下:

使用的是加密列進(jìn)行查詢(xún)了
當(dāng)配置了輔助查詢(xún)列后:

使用的是輔助列查詢(xún)。
到此這篇關(guān)于SpringBoot整合ShardingSphere5.x實(shí)現(xiàn)數(shù)據(jù)加解密功能的文章就介紹到這了,更多相關(guān)SpringBoot整合ShardingSphere5.x內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot+Mybatis-plus+shardingsphere實(shí)現(xiàn)分庫(kù)分表的方案
- SpringBoot?整合?ShardingSphere4.1.1實(shí)現(xiàn)分庫(kù)分表功能
- springboot如何使用yml文件方式配置shardingsphere
- SpringBoot3和ShardingSphere5框架實(shí)現(xiàn)數(shù)據(jù)分庫(kù)分表
- SpringBoot+ShardingSphereJDBC實(shí)現(xiàn)讀寫(xiě)分離詳情
- SpringBoot如何配置數(shù)據(jù)庫(kù)主從shardingsphere
相關(guān)文章
SpringBoot多數(shù)據(jù)源配置并通過(guò)注解實(shí)現(xiàn)動(dòng)態(tài)切換數(shù)據(jù)源
本文主要介紹了SpringBoot多數(shù)據(jù)源配置并通過(guò)注解實(shí)現(xiàn)動(dòng)態(tài)切換數(shù)據(jù)源,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08
SpringBoot使用@EnableAutoConfiguration實(shí)現(xiàn)自動(dòng)配置詳解
你有想過(guò)SpringBoot為什么能夠自動(dòng)的幫我們創(chuàng)建一個(gè)Bean對(duì)象么?或許在我們使用的時(shí)候只需要在自己自定義的配置文件中加入@Bean對(duì)象就可以,但SpringBoot是如何來(lái)創(chuàng)建的呢2022-08-08
Spring?Boot?3.x?GraalVM原生鏡像構(gòu)建內(nèi)存溢出問(wèn)題解決方案
文章解析了Spring?Boot?3.x與GraalVM?Native?Image構(gòu)建過(guò)程中出現(xiàn)的內(nèi)存溢出問(wèn)題,從問(wèn)題概述、根本原因、診斷工具、解決方案到高級(jí)調(diào)優(yōu)技巧和應(yīng)急解決方案,全面覆蓋了構(gòu)建優(yōu)化的各個(gè)方面,本文給大家介紹的非常詳細(xì),感興趣的朋友一起學(xué)習(xí)下吧2026-01-01
Java中JSch與jsch.addIdentity()完全詳細(xì)解析
JSch是SSH2的一個(gè)純Java實(shí)現(xiàn),它允許你連接到一個(gè)sshd服務(wù)器,使用端口轉(zhuǎn)發(fā),X11轉(zhuǎn)發(fā),文件傳輸?shù)鹊?這篇文章主要介紹了Java中JSch與jsch.addIdentity()完全詳細(xì)解析,需要的朋友可以參考下2026-01-01
IDEA POJO開(kāi)發(fā)神器之Groovy的使用詳解
這篇文章主要介紹了IDEA POJO開(kāi)發(fā)神器之Groovy的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
詳解JAVA生成將圖片存入數(shù)據(jù)庫(kù)的sql語(yǔ)句實(shí)現(xiàn)方法
這篇文章主要介紹了詳解JAVA生成將圖片存入數(shù)據(jù)庫(kù)的sql語(yǔ)句實(shí)現(xiàn)方法的相關(guān)資料,這里就是實(shí)現(xiàn)java生成圖片并存入數(shù)據(jù)庫(kù)的實(shí)例,需要的朋友可以參考下2017-08-08
教你怎么使用Java實(shí)現(xiàn)WebSocket
這篇文章主要介紹了教你怎么使用Java WebSocket,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有很好的幫助,需要的朋友可以參考下2021-05-05
9個(gè)小技巧讓你的Java if else看起來(lái)更優(yōu)雅
這篇文章主要給大家介紹了9個(gè)小技巧,通過(guò)這幾個(gè)小技巧可以讓你的Java if else看起來(lái)更優(yōu)雅,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11

