介绍

基于shardingsphere-jdbc 5.1.0 对敏感数据进行加密

默认加密算法

  • MD5 加密算法
  • AES 加密算法
  • RC4 加密算法
  • SM3 加密算法
  • SM4 加密算法

1. maven项目依赖

<dependencies>
	<dependency>
            <groupId>org.apache.shardingsphere</groupId>
            <artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId>
            <version>5.1.0</version>
        </dependency>
	<dependency>
           <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.2</version>
        </dependency>
</dependencies>

2.application.yml配置

spring:
  application:
    name: jdbc-myabtis-encrypt
  profiles:
    include: jdbc

mybatis:
  mapper-locations: classpath*:/mappers/*-mapper.xml
  type-aliases-package: com.lance.sharding.encrypt.domain
  configuration:
    default-fetch-size: 20
    default-statement-timeout: 30
    map-underscore-to-camel-case: true
    use-generated-keys: true

logging:
  file:
    name: logs/${spring.application.name}.log
  level:
    org.springframework: info
    com.lance.sharding.encrypt: debug

3.application-jdbc.yml配置

spring:
  shardingsphere:
    datasource:
      ds:
        type: com.zaxxer.hikari.HikariDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        jdbc-url: jdbc:mysql://127.0.0.1:3306/bbs_1?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=UTF-8
        password: li123456
        username: root
      names: ds
    rules:
      encrypt:
        encryptors:
          name-encryptor:
            props:
              aes-key-value: hello@aes.username
            type: AES
          pwd-encryptor:
            props:
              aes-key-value: hello@aes.password
            type: AES
        tables:
          t_user:
            columns:
              pwd:
                cipher-column: pwd
                encryptor-name: pwd-encryptor
              username:
                cipher-column: username
                encryptor-name: name-encryptor
    props:
      sql-show: true
      query-with-cipher-comlum: true

4.测试Sql脚本

CREATE TABLE t_user
(
    user_id       INT NOT NULL AUTO_INCREMENT,
    username      VARCHAR(32),
    pwd           VARCHAR(32),
    `status`      tinyint NULL DEFAULT NULL,
    `creator`     varchar(32) NULL DEFAULT NULL,
    `create_time` datetime NULL DEFAULT NULL,
    `updater`     varchar(32) NULL DEFAULT NULL,
    `update_time` datetime NULL DEFAULT NULL,
    PRIMARY KEY (user_id)
);

5.单元测试Test

class UserMapperTests {
  @Autowired
  private UserMapper userMapper;

  @Test
  @Disabled
  void save() {
    IntStream.range(0, 20).forEach(i -> {
      User user = new User();
      user.setUsername("user0" + i);
      user.setPwd("pwd-" + i);
      user.setCreator(user.getUsername());
      user.setUpdater(user.getUpdater());
      userMapper.save(user);
    });
  }

  @Test
  void findByUsername() {
    String username = "user01";
    User user = userMapper.findByUsername(username);
    log.info("===>{}", user);
  }
}

6.项目完整地址

shardingsphere-jdbc之Mybatis 敏感数据加密 Github 地址

shardingsphere-jdbc之Mybatis 敏感数据加密 Gitee 地址

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐