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.pack
config.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)文章
JavaWeb禁止瀏覽器緩存當(dāng)前Web頁面的方法
所謂瀏覽器緩存,是指當(dāng)?shù)谝淮卧L問網(wǎng)頁時,瀏覽器會將這些網(wǎng)頁緩存到本地,當(dāng)下一次再訪問這些被緩存的網(wǎng)頁時,瀏覽器就會直接從本地讀取這些網(wǎng)頁的內(nèi)容,而無需再從網(wǎng)絡(luò)上獲取2017-11-11Java 1.8使用數(shù)組實現(xiàn)循環(huán)隊列
這篇文章主要為大家詳細(xì)介紹了Java 1.8使用數(shù)組實現(xiàn)循環(huán)隊列,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-10-10MyBatis-Plus使用sl4j日志打印SQL的代碼詳解
以下是關(guān)于使用 Spring Boot 起始器替換 slf4j-api 和 logback 依賴的詳細(xì)步驟和注意事項,包括 MyBatis-Plus 的默認(rèn)日志級別信息,需要的朋友可以參考下2024-10-10Mybatis-Plus更新數(shù)據(jù)忽略null值問題
本文主要介紹了Mybatis-Plus更新數(shù)據(jù)忽略null值問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-02-02