Skip to content

数据源加密

数据源加密指的是我们对数据库的链接信息进行加密,目前 MyBatis-Flex 支持加密的内容有

  • 数据源 URL
  • 数据源用户名
  • 数据源用户密码

通过数据源加密功能,我们可以有效的保证数据库安全,减少数据盗用风险。

简介

在 MyBatis-Flex 中,我们并不关注数据库信息的加密方式,换一句话也就是说:MyBatis-Flex 支持任何类型的加密方式。 在 MyBatis-Flex 中内置了一个名为 DataSourceDecipher 的接口,其作用是去解密用户配置的加密内容,从而真实的配置信息。

开始使用

通过 DataSourceManager 配置 DataSourceDecipher。以下是示例代码:

java
DruidDataSource dataSource = new DruidDataSource();
dataSource.setUrl("jdbc:mysql://localhost:3306/flex_test");
dataSource.setUsername("root123"); // 真实的账号应该是 root
dataSource.setPassword("123456---0000"); // 真实的密码应该是 123456
        
//配置数据源解密器:DataSourceDecipher
DataSourceManager.setDecipher(new DataSourceDecipher() {
    @Override
    public String decrypt(DataSourceProperty property, String value) {
        //解密用户名,通过编码支持任意加密方式的解密
        if (property == DataSourceProperty.USERNAME) {
            return value.substring(0, 4);
        } 
        //解密密码
        else if (property == DataSourceProperty.PASSWORD) {
            return value.substring(0, 6);
        }
        return value;
    }
});
        
MybatisFlexBootstrap.getInstance()
        .setDataSource(dataSource)
        .addMapper(TenantAccountMapper.class)
        .start();

List<Row> rowList = Db.selectAll("tb_account");
RowUtil.printPretty(rowList);

需要注意的是:DataSourceManager.setDecipher() 的配置,需要在 MyBatis-Flex 初始化之前进行。

SpringBoot 支持

在 SpringBoot 项目下,直接通过 @Configuration 即可使用:

java
@Configuration
public class MyConfiguration {
    
    @Bean
    public DataSourceDecipher decipher(){
        DataSourceDecipher decipher = new ....;
        return decipher;
    }
    
}