From d26e31aad7a9e843ce149e88668ce38e2cefd219 Mon Sep 17 00:00:00 2001
From: 张天森 <1292933220@qq.com>
Date: 星期六, 08 十月 2022 14:59:55 +0800
Subject: [PATCH] update
---
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/model/helper/encrypt/ParammeterInterceptor.java | 87 ++++++++++++++++++++++---------------------
1 files changed, 45 insertions(+), 42 deletions(-)
diff --git a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/model/helper/encrypt/ParammeterInterceptor.java b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/model/helper/encrypt/ParammeterInterceptor.java
index 6c6c010..4512d93 100644
--- a/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/model/helper/encrypt/ParammeterInterceptor.java
+++ b/springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/model/helper/encrypt/ParammeterInterceptor.java
@@ -1,12 +1,12 @@
package com.panzhihua.service_community.model.helper.encrypt;
+import java.lang.reflect.Field;
+import java.sql.PreparedStatement;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Properties;
-import com.panzhihua.common.model.helper.encrypt.EncryptDecryptClass;
-import com.panzhihua.common.model.helper.encrypt.EncryptQuery;
-import com.panzhihua.common.model.helper.encrypt.EncryptQueryClass;
-import com.panzhihua.common.model.helper.encrypt.IEncryptDecrypt;
-import com.panzhihua.common.model.helper.sensitive.Sensitive;
-import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.binding.BindingException;
import org.apache.ibatis.binding.MapperMethod;
import org.apache.ibatis.executor.parameter.ParameterHandler;
@@ -16,44 +16,43 @@
import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.stereotype.Component;
-import java.lang.reflect.Field;
-import java.sql.PreparedStatement;
-import java.util.*;
-import java.util.stream.Stream;
+import com.panzhihua.common.model.helper.encrypt.EncryptDecryptClass;
+import com.panzhihua.common.model.helper.encrypt.EncryptQuery;
+import com.panzhihua.common.model.helper.encrypt.EncryptQueryClass;
+import com.panzhihua.common.model.helper.encrypt.IEncryptDecrypt;
+
+import lombok.extern.slf4j.Slf4j;
/**
- * 加密拦截器
- * 包含加密字段查询时 的加密步骤
+ * 加密拦截器 包含加密字段查询时 的加密步骤
+ *
* @author cedoo
* @since 2021-4-1 10:40:52
*/
-@Intercepts({
- @Signature(type = ParameterHandler.class, method = "setParameters", args = PreparedStatement.class),
-})
+@Intercepts({@Signature(type = ParameterHandler.class, method = "setParameters", args = PreparedStatement.class),})
@ConditionalOnProperty(value = "domain.encrypt", havingValue = "true")
@Component
@Slf4j
-public class ParammeterInterceptor implements Interceptor {
+public class ParammeterInterceptor implements Interceptor {
@Autowired
private IEncryptDecrypt encryptDecrypt;
@Override
public Object intercept(Invocation invocation) throws Throwable {
-
- //拦截 ParameterHandler 的 setParameters 方法 动态设置参数
+ // 拦截 ParameterHandler 的 setParameters 方法 动态设置参数
if (invocation.getTarget() instanceof ParameterHandler) {
- ParameterHandler parameterHandler = (ParameterHandler) invocation.getTarget();
- PreparedStatement ps = (PreparedStatement) invocation.getArgs()[0];
+ ParameterHandler parameterHandler = (ParameterHandler)invocation.getTarget();
+ PreparedStatement ps = (PreparedStatement)invocation.getArgs()[0];
// 反射获取 参数对像
- Field parameterField =
- parameterHandler.getClass().getDeclaredField("parameterObject");
+ Field parameterField = parameterHandler.getClass().getDeclaredField("parameterObject");
parameterField.setAccessible(true);
Object parameterObject = parameterField.get(parameterHandler);
if (Objects.nonNull(parameterObject)) {
Class<?> parameterObjectClass = parameterObject.getClass();
- EncryptDecryptClass encryptDecryptClass = AnnotationUtils.findAnnotation(parameterObjectClass, EncryptDecryptClass.class);
+ EncryptDecryptClass encryptDecryptClass =
+ AnnotationUtils.findAnnotation(parameterObjectClass, EncryptDecryptClass.class);
if (Objects.nonNull(encryptDecryptClass)) {
Field[] declaredFields = parameterObjectClass.getDeclaredFields();
final Object encrypt = encryptDecrypt.encrypt(declaredFields, parameterObject);
@@ -61,33 +60,37 @@
/**
* 通过加密字段查询时, 将查询参数中的加密字段加密后查询
*/
- if(parameterObjectClass == MapperMethod.ParamMap.class) {
- MapperMethod.ParamMap paramMap = (MapperMethod.ParamMap) parameterObject;
+ if (parameterObjectClass == MapperMethod.ParamMap.class) {
+ MapperMethod.ParamMap paramMap = (MapperMethod.ParamMap)parameterObject;
boolean encrypted = false;
- try{
+ try {
/**
- * 分页插件,会再分页查询时 进行多次查询,需要判断是否已对加密参数加密,防止多次加密后,查询失败
+ * 分页插件,会在分页查询时 进行多次查询,需要判断是否已对加密参数加密,防止多次加密后,查询失败
*/
- encrypted = paramMap.get("encrypted")!=null;
- }catch (BindingException be){
+ encrypted = paramMap.get("encrypted") != null;
+ } catch (BindingException be) {
encrypted = false;
}
- if(!encrypted) {
+ if (!encrypted) {
Iterator iterator = paramMap.entrySet().iterator();
- while(iterator.hasNext()){
- Map.Entry<String, Object> entry = (Map.Entry<String, Object>) iterator.next();
+ while (iterator.hasNext()) {
+ Map.Entry<String, Object> entry = (Map.Entry<String, Object>)iterator.next();
if (entry.getKey().startsWith("param")) {
Object v = entry.getValue();
- EncryptQueryClass encryptQueryClass = AnnotationUtils.findAnnotation(v.getClass(), EncryptQueryClass.class);
- if (Objects.nonNull(encryptQueryClass)) {
- Field[] declaredFields = v.getClass().getDeclaredFields();
- for (Field field : declaredFields) {
- if (field.isAnnotationPresent(EncryptQuery.class)) {
- try {
- final Object encrypt = encryptDecrypt.encrypt(new Field[]{field}, v);
- paramMap.put("encrypted", true);
- } catch (IllegalAccessException e) {
- e.printStackTrace();
+ if (v != null) {
+ EncryptQueryClass encryptQueryClass =
+ AnnotationUtils.findAnnotation(v.getClass(), EncryptQueryClass.class);
+ if (Objects.nonNull(encryptQueryClass)) {
+ Field[] declaredFields = v.getClass().getDeclaredFields();
+ for (Field field : declaredFields) {
+ if (field.isAnnotationPresent(EncryptQuery.class)) {
+ try {
+ final Object encrypt =
+ encryptDecrypt.encrypt(new Field[] {field}, v);
+ paramMap.put("encrypted", true);
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ }
}
}
}
--
Gitblit v1.7.1