Преглед изворни кода

增加 MyBatis Plus 的字段加密时,查询的示例

YunaiV пре 2 година
родитељ
комит
e81ac9c1d0

+ 12 - 5
yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/type/EncryptTypeHandler.java

@@ -29,29 +29,36 @@ public class EncryptTypeHandler extends BaseTypeHandler<String> {
     @Override
     public String getNullableResult(ResultSet rs, String columnName) throws SQLException {
         String value = rs.getString(columnName);
-        return getResult(value);
+        return decrypt(value);
     }
 
     @Override
     public String getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
         String value = rs.getString(columnIndex);
-        return getResult(value);
+        return decrypt(value);
     }
 
     @Override
     public String getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
         String value = cs.getString(columnIndex);
-        return getResult(value);
+        return decrypt(value);
     }
 
-    private String getResult(String value) {
+    private static String decrypt(String value) {
         if (value == null) {
             return null;
         }
         return getEncryptor().decrypt(value);
     }
 
-    private StringEncryptor getEncryptor() {
+    public static String encrypt(String rawValue) {
+        if (rawValue == null) {
+            return null;
+        }
+        return getEncryptor().encrypt(rawValue);
+    }
+
+    private static StringEncryptor getEncryptor() {
         if (encryptor != null) {
             return encryptor;
         }

+ 12 - 0
yudao-module-infra/yudao-module-infra-biz/src/test/java/cn/iocoder/yudao/module/infra/service/db/DataSourceConfigServiceImplTest.java

@@ -132,4 +132,16 @@ public class DataSourceConfigServiceImplTest extends BaseDbUnitTest {
         assertServiceException(() -> dataSourceConfigService.deleteDataSourceConfig(id), DATA_SOURCE_CONFIG_NOT_EXISTS);
     }
 
+    @Test // 测试使用 password 查询,可以查询到数据
+    public void testSelectPassword() {
+        // mock 数据
+        DataSourceConfigDO dbDataSourceConfig = randomPojo(DataSourceConfigDO.class);
+        dataSourceConfigMapper.insert(dbDataSourceConfig);// @Sql: 先插入出一条存在的数据
+
+        // 调用
+        DataSourceConfigDO result = dataSourceConfigMapper.selectOne(DataSourceConfigDO::getPassword,
+                EncryptTypeHandler.encrypt(dbDataSourceConfig.getPassword()));
+        System.out.println(result);
+    }
+
 }

+ 1 - 0
yudao-server/src/main/resources/application.yaml

@@ -61,6 +61,7 @@ mybatis-plus:
       logic-delete-value: 1 # 逻辑已删除值(默认为 1)
       logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
   type-aliases-package: ${yudao.info.base-package}.module.*.dal.dataobject
+  type-handlers-package: ${yudao.info.base-package}.framework.mybatis.core.type
 
 --- #################### 芋道相关配置 ####################