SpringBoot整合ShardingSphere5.x实现数据加解密功能(最新推荐)
环境:Springboot2.6.14 + ShardingSphere5.3.0
准备环境
添加依赖
<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>
数据表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)
#数据源配置 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 #规则配置 rules: - !ENCRYPT #加解密相关配置 tables: users: columns: pwd: #逻辑列(如果是老系统一般都会吧这个逻辑列和实际物理列名一致) plainColumn: pwd #实际物理列名 cipherColumn: pwd_cipher #加密后的列名 encryptorName: pwd_encryptor #加密列使用的加密算法(对应下面的配置) #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 #执行时打印SQL props: sql-show: true
有了上面配置后,接下来就可以进行相应的CRUD操作了。
CRUD操作
实体对象
#数据源配置 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 #规则配置 rules: - !ENCRYPT #加解密相关配置 tables: users: columns: pwd: #逻辑列(如果是老系统一般都会吧这个逻辑列和实际物理列名一致) plainColumn: pwd #实际物理列名 cipherColumn: pwd_cipher #加密后的列名 encryptorName: pwd_encryptor #加密列使用的加密算法(对应下面的配置) #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 #执行时打印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) ; } }
测试结果
数据源及查询辅助列
数据源配置
在config.yaml文件中我们配置了连接池信息,但是实际没有生效。如上配置的最小连接数是10,最大是200,但是实际打印都成了默认值都是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
如上配置后连接池才正常。
辅助查询列
辅助查询列会根据你的配置是否使用辅助列,当没有配置辅助查询列时,执行SQL如下:
使用的是加密列进行查询了
当配置了辅助查询列后:
使用的是辅助列查询。
到此这篇关于SpringBoot整合ShardingSphere5.x实现数据加解密功能的文章就介绍到这了,更多相关SpringBoot整合ShardingSphere5.x内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
SpringMVC中的HandlerMappingIntrospector工具类详解
这篇文章主要介绍了SpringMVC中的HandlerMappingIntrospector工具类详解,这是一个Spring MVC助手类,用于集合应用所配置的HandlerMapping(url pattern和请求处理handler之间的映射)表,用于获取针对某个请求的如下信息,需要的朋友可以参考下2023-12-12Java中BufferedReader类获取输入输入字符串实例
这篇文章主要介绍了Java中BufferedReader类获取输入输入字符串实例,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下2018-02-02SpringBoot+RabbitMQ+Redis实现商品秒杀的示例代码
本文主要介绍了SpringBoot+RabbitMQ+Redis实现商品秒杀,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2021-11-11详解Spring Cloud Stream使用延迟消息实现定时任务(RabbitMQ)
这篇文章主要介绍了详解Spring Cloud Stream使用延迟消息实现定时任务(RabbitMQ),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2019-01-01SpringBoot项目中使用Sharding-JDBC实现读写分离的详细步骤
Sharding-JDBC是一个分布式数据库中间件,它不仅支持数据分片,还可以轻松实现数据库的读写分离,本文介绍如何在Spring Boot项目中集成Sharding-JDBC并实现读写分离的详细步骤,需要的朋友可以参考下2024-08-08
最新评论