From 91cd4d4d22aca5aa2986335224f29c7635f0dcae Mon Sep 17 00:00:00 2001 From: Charles7c Date: Tue, 18 Jun 2024 23:12:00 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20=E4=BC=98=E5=8C=96=E9=83=A8=E5=88=86?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DataPermissionHandlerImpl.java | 1 - .../continew-starter-security-crypto/pom.xml | 1 - .../core/AbstractMyBatisInterceptor.java | 4 +- .../core/MyBatisEncryptInterceptor.java | 70 +++++++++---------- 4 files changed, 37 insertions(+), 39 deletions(-) diff --git a/continew-starter-data/continew-starter-data-mybatis-plus/src/main/java/top/continew/starter/data/mybatis/plus/datapermission/DataPermissionHandlerImpl.java b/continew-starter-data/continew-starter-data-mybatis-plus/src/main/java/top/continew/starter/data/mybatis/plus/datapermission/DataPermissionHandlerImpl.java index aa69e7fb..a569c0a7 100644 --- a/continew-starter-data/continew-starter-data-mybatis-plus/src/main/java/top/continew/starter/data/mybatis/plus/datapermission/DataPermissionHandlerImpl.java +++ b/continew-starter-data/continew-starter-data-mybatis-plus/src/main/java/top/continew/starter/data/mybatis/plus/datapermission/DataPermissionHandlerImpl.java @@ -176,7 +176,6 @@ public class DataPermissionHandlerImpl implements DataPermissionHandler { * @param expression 处理前的表达式 * @return 处理完后的表达式 */ - // private Expression buildSelfExpression(DataPermission dataPermission, DataPermissionCurrentUser currentUser, Expression expression) { diff --git a/continew-starter-security/continew-starter-security-crypto/pom.xml b/continew-starter-security/continew-starter-security-crypto/pom.xml index 2ac25442..b08549a4 100644 --- a/continew-starter-security/continew-starter-security-crypto/pom.xml +++ b/continew-starter-security/continew-starter-security-crypto/pom.xml @@ -24,6 +24,5 @@ com.baomidou mybatis-plus-core - \ No newline at end of file diff --git a/continew-starter-security/continew-starter-security-crypto/src/main/java/top/continew/starter/security/crypto/core/AbstractMyBatisInterceptor.java b/continew-starter-security/continew-starter-security-crypto/src/main/java/top/continew/starter/security/crypto/core/AbstractMyBatisInterceptor.java index e51eb845..92a78a82 100644 --- a/continew-starter-security/continew-starter-security-crypto/src/main/java/top/continew/starter/security/crypto/core/AbstractMyBatisInterceptor.java +++ b/continew-starter-security/continew-starter-security-crypto/src/main/java/top/continew/starter/security/crypto/core/AbstractMyBatisInterceptor.java @@ -60,12 +60,12 @@ public abstract class AbstractMyBatisInterceptor implements Interceptor { * 获取加密参数 * * @param mappedStatementId 映射语句 ID - * @param parameterIndex 参数数量 + * @param parameterIndex 参数索引 * @return 加密参数 */ public Map getEncryptParams(String mappedStatementId, Integer parameterIndex) { return ENCRYPT_PARAM_CACHE - .computeIfAbsent(mappedStatementId, it -> getEncryptParamsNoCached(mappedStatementId, parameterIndex)); + .computeIfAbsent(mappedStatementId, m -> getEncryptParamsNoCached(mappedStatementId, parameterIndex)); } /** diff --git a/continew-starter-security/continew-starter-security-crypto/src/main/java/top/continew/starter/security/crypto/core/MyBatisEncryptInterceptor.java b/continew-starter-security/continew-starter-security-crypto/src/main/java/top/continew/starter/security/crypto/core/MyBatisEncryptInterceptor.java index 9b99a360..e5271047 100644 --- a/continew-starter-security/continew-starter-security-crypto/src/main/java/top/continew/starter/security/crypto/core/MyBatisEncryptInterceptor.java +++ b/continew-starter-security/continew-starter-security-crypto/src/main/java/top/continew/starter/security/crypto/core/MyBatisEncryptInterceptor.java @@ -26,7 +26,6 @@ import com.baomidou.mybatisplus.core.metadata.TableFieldInfo; import com.baomidou.mybatisplus.core.metadata.TableInfo; import com.baomidou.mybatisplus.core.metadata.TableInfoHelper; import com.baomidou.mybatisplus.core.toolkit.Constants; -import com.baomidou.mybatisplus.core.toolkit.StringUtils; import org.apache.ibatis.cache.CacheKey; import org.apache.ibatis.executor.Executor; import org.apache.ibatis.mapping.BoundSql; @@ -119,9 +118,9 @@ public class MyBatisEncryptInterceptor extends AbstractMyBatisInterceptor { Object entity = parameterMap.getOrDefault(parameterName, null); this.doEncrypt(this.getEncryptFields(entity), entity); } else if (parameterName.startsWith(Constants.WRAPPER)) { + // 处理参数为 Wrapper 的情况 Wrapper wrapper = (Wrapper)parameterMap.getOrDefault(parameterName, null); - // 处理 wrapper 的情况 - handleWrapperEncrypt(wrapper, mappedStatement); + this.doEncrypt(wrapper, mappedStatement); } else { FieldEncrypt fieldEncrypt = encryptParamEntry.getValue(); parameterMap.put(parameterName, this.doEncrypt(parameterMap.get(parameterName), fieldEncrypt)); @@ -129,23 +128,6 @@ public class MyBatisEncryptInterceptor extends AbstractMyBatisInterceptor { } } - /** - * 处理加密 - * - * @param parameterValue 参数值 - * @param fieldEncrypt 字段加密注解 - * @throws Exception / - */ - private Object doEncrypt(Object parameterValue, FieldEncrypt fieldEncrypt) throws Exception { - if (null == parameterValue) { - return null; - } - IEncryptor encryptor = super.getEncryptor(fieldEncrypt); - // 优先获取自定义对称加密算法密钥,获取不到时再获取全局配置 - String password = ObjectUtil.defaultIfBlank(fieldEncrypt.password(), properties.getPassword()); - return encryptor.encrypt(parameterValue.toString(), password, properties.getPublicKey()); - } - /** * 处理加密 * @@ -166,21 +148,21 @@ public class MyBatisEncryptInterceptor extends AbstractMyBatisInterceptor { } /** - * 处理 wrapper 的加密情况 + * 处理 Wrapper 加密 * - * @param wrapper wrapper 对象 + * @param wrapper Wrapper 对象 * @param mappedStatement 映射语句 * @throws Exception / */ - private void handleWrapperEncrypt(Wrapper wrapper, MappedStatement mappedStatement) throws Exception { + private void doEncrypt(Wrapper wrapper, MappedStatement mappedStatement) throws Exception { if (wrapper instanceof AbstractWrapper abstractWrapper) { String sqlSet = abstractWrapper.getSqlSet(); - if (StringUtils.isEmpty(sqlSet)) { + if (CharSequenceUtil.isEmpty(sqlSet)) { return; } String className = CharSequenceUtil.subBefore(mappedStatement.getId(), StringConstants.DOT, true); Class mapperClass = Class.forName(className); - Optional baseMapperGenerics = getDoByMapperClass(mapperClass, Optional.empty()); + Optional baseMapperGenerics = getEntityTypeByMapperClass(mapperClass, Optional.empty()); // 获取不到泛型对象 则不进行下面的逻辑 if (baseMapperGenerics.isEmpty()) { return; @@ -190,7 +172,7 @@ public class MyBatisEncryptInterceptor extends AbstractMyBatisInterceptor { // 将 name=#{ew.paramNameValuePairs.xxx},age=#{ew.paramNameValuePairs.xxx} 切出来 for (String sqlFragment : sqlSet.split(Constants.COMMA)) { String columnName = sqlFragment.split(Constants.EQUALS)[0]; - // 截取其中的 xxx 字符 :#{ew.paramNameValuePairs.xxx} + // 截取其中的 xxx 字符,例如:#{ew.paramNameValuePairs.xxx} String paramNameVal = sqlFragment.split(Constants.EQUALS)[1].substring(25, sqlFragment .split(Constants.EQUALS)[1].length() - 1); Optional fieldInfo = fieldList.stream() @@ -201,22 +183,39 @@ public class MyBatisEncryptInterceptor extends AbstractMyBatisInterceptor { FieldEncrypt fieldEncrypt = tableFieldInfo.getField().getAnnotation(FieldEncrypt.class); if (fieldEncrypt != null) { Map paramNameValuePairs = abstractWrapper.getParamNameValuePairs(); - Object o = paramNameValuePairs.get(paramNameVal); - paramNameValuePairs.put(paramNameVal, this.doEncrypt(o, fieldEncrypt)); + paramNameValuePairs.put(paramNameVal, this.doEncrypt(paramNameValuePairs + .get(paramNameVal), fieldEncrypt)); } } } } } + /** + * 处理加密 + * + * @param parameterValue 参数值 + * @param fieldEncrypt 字段加密注解 + * @throws Exception / + */ + private Object doEncrypt(Object parameterValue, FieldEncrypt fieldEncrypt) throws Exception { + if (null == parameterValue) { + return null; + } + IEncryptor encryptor = super.getEncryptor(fieldEncrypt); + // 优先获取自定义对称加密算法密钥,获取不到时再获取全局配置 + String password = ObjectUtil.defaultIfBlank(fieldEncrypt.password(), properties.getPassword()); + return encryptor.encrypt(parameterValue.toString(), password, properties.getPublicKey()); + } + /** * 从 Mapper 获取泛型 * - * @param mapperClass mapper class - * @param tempResult 临时存储的泛型对象 - * @return domain 对象 + * @param mapperClass Mapper class + * @param tempResult 临时存储的泛型对象 + * @return 泛型 */ - private static Optional getDoByMapperClass(Class mapperClass, Optional tempResult) { + private static Optional getEntityTypeByMapperClass(Class mapperClass, Optional tempResult) { Type[] genericInterfaces = mapperClass.getGenericInterfaces(); Optional result = tempResult; for (Type genericInterface : genericInterfaces) { @@ -225,15 +224,16 @@ public class MyBatisEncryptInterceptor extends AbstractMyBatisInterceptor { Type[] actualTypeArguments = parameterizedType.getActualTypeArguments(); // 如果匹配上 BaseMapper 且泛型参数是 Class 类型,则直接返回 if (rawType.equals(BaseMapper.class)) { - return actualTypeArguments[0] instanceof Class ? - Optional.of((Class) actualTypeArguments[0]) : result; + return actualTypeArguments[0] instanceof Class + ? Optional.of((Class)actualTypeArguments[0]) + : result; } else if (rawType instanceof Class interfaceClass) { // 如果泛型参数是 Class 类型,则传递给递归调用 if (actualTypeArguments[0] instanceof Class tempResultClass) { result = Optional.of(tempResultClass); } // 递归调用,继续查找 - Optional innerResult = getDoByMapperClass(interfaceClass, result); + Optional innerResult = getEntityTypeByMapperClass(interfaceClass, result); if (innerResult.isPresent()) { return innerResult; }