SpringBoot整合ShardingSphere5.x實現(xiàn)數(shù)據(jù)加解密功能(最新推薦)
環(huán)境:Springboot2.6.14 + ShardingSphere5.3.0
準(zhǔn)備環(huán)境
添加依賴
<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:查詢輔助列
配置文件
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)一般都會吧這個邏輯列和實際物理列名一致)
plainColumn: pwd #實際物理列名
cipherColumn: pwd_cipher #加密后的列名
encryptorName: pwd_encryptor #加密列使用的加密算法(對應(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í)行時打印SQL
props:
sql-show: true 有了上面配置后,接下來就可以進(jìn)行相應(yīng)的CRUD操作了。
CRUD操作
實體對象
#數(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)一般都會吧這個邏輯列和實際物理列名一致)
plainColumn: pwd #實際物理列名
cipherColumn: pwd_cipher #加密后的列名
encryptorName: pwd_encryptor #加密列使用的加密算法(對應(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í)行時打印SQL
props:
sql-show: true Mapper類
public interface UsersMapper extends BaseMapper<Users> {
}測試類
@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) ;
}
}測試結(jié)果

數(shù)據(jù)源及查詢輔助列
數(shù)據(jù)源配置
在config.yaml文件中我們配置了連接池信息,但是實際沒有生效。如上配置的最小連接數(shù)是10,最大是200,但是實際打印都成了默認(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如上配置后連接池才正常。
輔助查詢列
輔助查詢列會根據(jù)你的配置是否使用輔助列,當(dāng)沒有配置輔助查詢列時,執(zhí)行SQL如下:

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

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

