该章节次要介绍如何应用数据脱敏性能,如何进行相干配置。数据脱敏性能即可与数据分片性能独特应用,又可作为独自性能组件,独立应用。
与数据分片性能独特应用时,会创立ShardingDataSource;独自应用时,会创立EncryptDataSource来实现数据脱敏性能。

不应用Spring

引入Maven依赖

<dependency>    <groupId>org.apache.shardingsphere</groupId>    <artifactId>sharding-jdbc-core</artifactId>    <version>${sharding-sphere.version}</version></dependency>

基于Java编码的规定配置

       // 配置数据源       BasicDataSource dataSource = new BasicDataSource();       dataSource.setDriverClassName("com.mysql.jdbc.Driver");       dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/encrypt");       dataSource.setUsername("root");       dataSource.setPassword("");              // 配置脱敏规定       Properties props = new Properties();       props.setProperty("aes.key.value", "123456");       EncryptorRuleConfiguration encryptorConfig = new EncryptorRuleConfiguration("AES", props);       EncryptColumnRuleConfiguration columnConfig = new EncryptColumnRuleConfiguration("plain_pwd", "cipher_pwd", "", "aes");       EncryptTableRuleConfiguration tableConfig = new EncryptTableRuleConfiguration(Collections.singletonMap("pwd", columnConfig));       EncryptRuleConfiguration encryptRuleConfig = new EncryptRuleConfiguration();       encryptRuleConfig.getEncryptors().put("aes", encryptorConfig);       encryptRuleConfig.getTables().put("t_encrypt", tableConfig);              // 获取数据源对象       DataSource dataSource = EncryptDataSourceFactory.createDataSource(dataSource, encryptRuleConfig, new Properties());

基于Yaml的规定配置

或通过Yaml形式配置,与以上配置等价:

dataSource:  !!org.apache.commons.dbcp2.BasicDataSource  driverClassName: com.mysql.jdbc.Driver  url: jdbc:mysql://127.0.0.1:3306/encrypt?serverTimezone=UTC&useSSL=false  username: root  password:encryptRule:  tables:    t_order:      columns:        user_id:          cipherColumn: user_cipher          encryptor: order_encryptor  encryptors:    order_encryptor:      type: aes      props:        aes.key.value: 123456props:  query.with.cipher.column: true #是否应用密文列查问
    DataSource dataSource = YamlEncryptDataSourceFactory.createDataSource(yamlFile);

应用Spring

引入Maven依赖

<!-- for spring boot --><dependency>    <groupId>org.apache.shardingsphere</groupId>    <artifactId>sharding-jdbc-spring-boot-starter</artifactId>    <version>${sharding-sphere.version}</version></dependency><!-- for spring namespace --><dependency>    <groupId>org.apache.shardingsphere</groupId>    <artifactId>sharding-jdbc-spring-namespace</artifactId>    <version>${sharding-sphere.version}</version></dependency>

基于Spring boot的规定配置

spring.shardingsphere.datasource.name=dsspring.shardingsphere.datasource.ds.type=org.apache.commons.dbcp2.BasicDataSourcespring.shardingsphere.datasource.ds.driver-class-name=com.mysql.jdbc.Driverspring.shardingsphere.datasource.ds.url=jdbc:mysql://127.0.0.1:3306/encrypt?serverTimezone=UTC&useSSL=falsespring.shardingsphere.datasource.ds.username=rootspring.shardingsphere.datasource.ds.password=spring.shardingsphere.datasource.ds.max-total=100spring.shardingsphere.encrypt.encryptors.encryptor_aes.type=aesspring.shardingsphere.encrypt.encryptors.encryptor_aes.props.aes.key.value=123456spring.shardingsphere.encrypt.tables.t_order.columns.user_id.plainColumn=user_decryptspring.shardingsphere.encrypt.tables.t_order.columns.user_id.cipherColumn=user_encryptspring.shardingsphere.encrypt.tables.t_order.columns.user_id.assistedQueryColumn=user_assistedspring.shardingsphere.encrypt.tables.t_order.columns.user_id.encryptor=encryptor_aesspring.shardingsphere.props.sql.show=truespring.shardingsphere.props.query.with.cipher.column=true

基于Spring boot + JNDI的规定配置

如果您打算应用Spring boot + JNDI的形式,在利用容器(如Tomcat)中应用Sharding-JDBC时,可应用spring.shardingsphere.datasource.${datasourceName}.jndiName来代替数据源的一系列配置。
如:

spring.shardingsphere.datasource.name=dsspring.shardingsphere.datasource.ds.jndi-name=java:comp/env/jdbc/dsspring.shardingsphere.encrypt.encryptors.encryptor_aes.type=aesspring.shardingsphere.encrypt.encryptors.encryptor_aes.props.aes.key.value=123456spring.shardingsphere.encrypt.tables.t_order.columns.user_id.plainColumn=user_decryptspring.shardingsphere.encrypt.tables.t_order.columns.user_id.cipherColumn=user_encryptspring.shardingsphere.encrypt.tables.t_order.columns.user_id.assistedQueryColumn=user_assistedspring.shardingsphere.encrypt.tables.t_order.columns.user_id.encryptor=encryptor_aesspring.shardingsphere.props.sql.show=truespring.shardingsphere.props.query.with.cipher.column=true

基于Spring命名空间的规定配置

<beans xmlns="http://www.springframework.org/schema/beans"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xmlns:encrypt="http://shardingsphere.apache.org/schema/shardingsphere/encrypt"       xmlns:bean="http://www.springframework.org/schema/util"       xsi:schemaLocation="http://www.springframework.org/schema/beans                         http://www.springframework.org/schema/beans/spring-beans.xsd                        http://shardingsphere.apache.org/schema/shardingsphere/encrypt                         http://shardingsphere.apache.org/schema/shardingsphere/encrypt/encrypt.xsd                         http://www.springframework.org/schema/util                         http://www.springframework.org/schema/util/spring-util.xsd">    <import resource="datasource/dataSource.xml" />       <bean id="db" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">        <property name="driverClassName" value="com.mysql.jdbc.Driver" />        <property name="url" value="jdbc:mysql://127.0.0.1:3306/encrypt?serverTimezone=UTC&useSSL=false" />        <property name="username" value="root" />        <property name="password" value="" />        <property name="maxTotal" value="100" />    </bean>        <bean:properties id="props">        <prop key="aes.key.value">123456</prop>    </bean:properties>        <encrypt:data-source id="encryptDataSource" data-source-name="db" >        <encrypt:encrypt-rule>            <encrypt:tables>                <encrypt:table name="t_order">                    <encrypt:column logic-column="user_id" plain-column="user_decrypt" cipher-column="user_encrypt" assisted-query-column="user_assisted" encryptor-ref="encryptor_aes" />                    <encrypt:column logic-column="order_id" plain-column="order_decrypt" cipher-column="order_encrypt" assisted-query-column="order_assisted" encryptor-ref="encryptor_md5"/>                </encrypt:table>            </encrypt:tables>            <encrypt:encryptors>                <encrypt:encryptor id="encryptor_aes" type="AES" props-ref="props"/>                <encrypt:encryptor id="encryptor_md5" type="MD5" />            </encrypt:encryptors>        </encrypt:encrypt-rule>        <encrypt:props>            <prop key="sql.show">true</prop>            <prop key="query.with.cipher.column">true</prop>        </encrypt:props>    </encrypt:data-source></beans>

在Spring中应用DataSource

间接通过注入的形式即可应用DataSource,或者将DataSource配置在JPA、Hibernate或MyBatis中应用。

@Resourceprivate DataSource dataSource;