Browse Source

1.识别问题
2.数据脱敏注解

wks 1 năm trước cách đây
mục cha
commit
14eaa0c643

+ 35 - 0
src/main/java/com/ydtech/config/dataMasking/Desensitize.java

@@ -0,0 +1,35 @@
+package com.ydtech.config.dataMasking;
+
+
+import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.FIELD)
+@JacksonAnnotationsInside
+@JsonSerialize(using = DesensitizeSerialize.class)
+public @interface Desensitize {
+
+    /**
+     * 脱敏类型
+     */
+    DesensitizeType type() default DesensitizeType.DEFAULT;
+
+    /**
+     * 脱敏起始位置
+     */
+    int startInclude() default 0;
+
+    /**
+     * 脱敏结束位置
+     */
+    int endExclude() default 0;
+
+}
+

+ 99 - 0
src/main/java/com/ydtech/config/dataMasking/DesensitizeSerialize.java

@@ -0,0 +1,99 @@
+package com.ydtech.config.dataMasking;
+
+import cn.hutool.core.util.StrUtil;
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.databind.BeanProperty;
+import com.fasterxml.jackson.databind.JsonSerializer;
+import com.fasterxml.jackson.databind.SerializerProvider;
+import com.fasterxml.jackson.databind.ser.ContextualSerializer;
+
+import java.io.IOException;
+
+public class DesensitizeSerialize extends JsonSerializer<String> implements ContextualSerializer {
+
+    /**
+     * 脱敏类型,默认为DEFAULT
+     */
+    private DesensitizeType type;
+    /**
+     * 脱敏起始位置
+     */
+    private int startInclude;
+    /**
+     * 脱敏结束位置
+     */
+    private int endExclude;
+
+    public DesensitizeSerialize() {
+        this.type = DesensitizeType.DEFAULT;
+    }
+
+
+    public DesensitizeSerialize(DesensitizeType type) {
+        this.type = type;
+    }
+
+    /**
+     * 序列化字符串时调用,根据脱敏类型对字符串进行相应的脱敏处理。
+     *
+     * @param value       待序列化的字符串
+     * @param gen         JSON生成器,用于写入处理后的字符串
+     * @param serializers 序列化器提供者,用于获取其他序列化器
+     * @throws IOException 如果序列化过程中发生I/O错误
+     */
+    @Override
+    public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
+        switch (type) {
+            case CUSTOM_RULE:
+                // 这里是对字符串的startInclude到endExclude字段进行隐藏处理,如果想要实现两端保留,可以考虑使用StrUtil的replace方法
+                gen.writeString(StrUtil.hide(value, startInclude, endExclude));
+                break;
+            case PHONE:
+                gen.writeString(DesensitizedUtil.mobilePhone(value));
+                break;
+            case EMAIL:
+                gen.writeString(DesensitizedUtil.email(value));
+                break;
+            case ID_CARD:
+                gen.writeString(DesensitizedUtil.idCardNum(value, 1, 2));
+                break;
+            case BANK_CARD:
+                gen.writeString(DesensitizedUtil.bankCard(value));
+                break;
+            case ADDRESS:
+                gen.writeString(DesensitizedUtil.address(value, 8));
+                break;
+            case CHINESE_NAME:
+                gen.writeString(DesensitizedUtil.chineseName(value));
+                break;
+            case PASSWORD:
+                gen.writeString(DesensitizedUtil.password(value));
+                break;
+            default:
+                gen.writeString(value);
+                break;
+        }
+    }
+
+    /**
+     * 根据上下文信息创建自定义的序列化器,用于处理带有@Desensitize注解的属性。
+     *
+     * @param prov     序列化器提供者,用于获取其他序列化器
+     * @param property 当前属性的信息,用于获取注解和属性类型
+     * @return 自定义的序列化器实例
+     */
+    @Override
+    public JsonSerializer<?> createContextual(SerializerProvider prov, BeanProperty property) {
+        if (property != null) {
+            Desensitize annotation = property.getAnnotation(Desensitize.class);
+            if (annotation != null) {
+                this.type = annotation.type();
+                if (annotation.type() == DesensitizeType.CUSTOM_RULE) {
+                    this.startInclude = annotation.startInclude();
+                    this.endExclude = annotation.endExclude();
+                }
+            }
+        }
+        return this;
+    }
+}

+ 45 - 0
src/main/java/com/ydtech/config/dataMasking/DesensitizeType.java

@@ -0,0 +1,45 @@
+package com.ydtech.config.dataMasking;
+
+
+
+
+public enum DesensitizeType {
+
+    /**
+     * 默认脱敏
+     */
+    DEFAULT,
+    /**
+     * 自定义脱敏
+     */
+    CUSTOM_RULE,
+    /**
+     * 手机号脱敏
+     */
+    PHONE,
+    /**
+     * 电子邮件脱敏
+     */
+    EMAIL,
+    /**
+     * 身份证号脱敏
+     */
+    ID_CARD,
+    /**
+     * 银行卡号脱敏
+     */
+    BANK_CARD,
+    /**
+     * 地址脱敏
+     */
+    ADDRESS,
+    /**
+     * 中文姓名脱敏
+     */
+    CHINESE_NAME,
+    /**
+     * 密码脱敏
+     */
+    PASSWORD,
+
+}

+ 35 - 0
src/main/java/com/ydtech/config/dataMasking/DesensitizedUtil.java

@@ -0,0 +1,35 @@
+package com.ydtech.config.dataMasking;
+
+import cn.hutool.core.util.StrUtil;
+
+public class DesensitizedUtil {
+
+    public static String mobilePhone(String value) {
+        return StrUtil.hide(value, 3, 7);
+    }
+
+    public static String email(String value) {
+        return StrUtil.hide(value, 2, 4);
+    }
+
+    public static String idCardNum(String value, int i, int i1) {
+        return StrUtil.hide(value, i, i1);
+    }
+
+    public static String bankCard(String value) {
+        return StrUtil.hide(value, 4, value.length() - 3);
+    }
+
+    public static String address(String value, int i) {
+        return StrUtil.hide(value, i, value.length());
+    }
+
+    public static String chineseName(String value) {
+        return StrUtil.hide(value, 1, 2);
+    }
+
+    public static String password(String value) {
+        return StrUtil.hide(value, 4, 8);
+    }
+
+}

+ 1 - 1
src/main/java/com/ydtech/modules/order/service/impl/IdentifyServiceImpl.java

@@ -154,7 +154,7 @@ public class IdentifyServiceImpl implements IdentifyService {
         Map<String, DictionaryManagement> m = DictEnumConfig.getDmMap();
         DictionaryManagement natureOfVehicleUse = m.get("natureOfVehicleUse");
         List<DictionaryData> ddList = natureOfVehicleUse.getDdList();
-        if(ddList!=null && ddList.size()>0){
+        if(ddList!=null && !ddList.isEmpty()){
             for (DictionaryData dictionaryData : ddList) {
                 enumMap.put(dictionaryData.getDictTag(),dictionaryData.getDictValue());
             }

+ 14 - 26
src/main/java/com/ydtech/utils/baidu/MultiObjectDetect.java

@@ -14,6 +14,7 @@ import javax.annotation.PostConstruct;
 import java.net.URLEncoder;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Optional;
 
 /**
  * @ClassName MultiObjectDetect
@@ -37,7 +38,6 @@ public class MultiObjectDetect {
     }
 
 
-
     public static HttpResult multiObjectDetect(String imgData) {
         Map<String, Object> ma = new HashMap<>();
 
@@ -126,32 +126,20 @@ public class MultiObjectDetect {
             //先获取使用性质
             String useNature = JSON.parseObject(jb.getString("使用性质")).getString("words");
             String hpzl = JSON.parseObject(jb.getString("车辆类型")).getString("words");
-            if(useNature != null && useNature.equals("非营运")) {
-                //家用车
-//                if (hpzl != null && (hpzl.equals("小型轿车") || hpzl.equals("小型普通客车"))) {
-//                    //车辆类型
-//                    cardUserInfo.setPlateType("02");
-//                    //车辆种类
-//                    cardUserInfo.set
-//                }
-                cardUserInfo.setPlateType("A0");
-                cardUserInfo.setCategory("K33");
-                cardUserInfo.setVehicleUse("05");
+            String s = Optional.ofNullable(hpzl).orElse("");
 
-            } else if(useNature != null && useNature.equals("货运")) {
-                //货车
-                if(hpzl != null && hpzl.equals("轻型普通货车"))
-                {
-                    cardUserInfo.setCategory("H31");
-                    cardUserInfo.setPlateType("A1");
-                    cardUserInfo.setVehicleUse("08");
-                }else{
-                    //后期进行赛选
-                    cardUserInfo.setCategory("H31");
-                    cardUserInfo.setPlateType("A1");
+            if(s.contains("货车")) {
+                cardUserInfo.setPlateType("A1");
+                if("货运".equals(useNature)){
+                    cardUserInfo.setVehicleUse("04");
+                }else if("非营运".equals(useNature)){
                     cardUserInfo.setVehicleUse("08");
                 }
-
+                cardUserInfo.setCategory("H31");
+            }else {
+                cardUserInfo.setPlateType("A0");
+                cardUserInfo.setCategory("K33");
+                cardUserInfo.setVehicleUse("05");
             }
 
             //判断使用性质
@@ -173,7 +161,7 @@ public class MultiObjectDetect {
         }
     }
 
-    public static void conversionFront(CardUserInfo cardUserInfo, CardUserInfo cardUserInfoNew){
+    public static void conversionFront(CardUserInfo cardUserInfo, CardUserInfo cardUserInfoNew) {
         cardUserInfo.setVIN(cardUserInfoNew.getVIN());
         cardUserInfo.setIssueDate(cardUserInfoNew.getIssueDate());
         cardUserInfo.setCategory(cardUserInfoNew.getCategory());
@@ -213,7 +201,7 @@ public class MultiObjectDetect {
 
     }
 
-    public static void conversionBack(CardUserInfo cardUserInfo, CardUserInfo cardUserInfoNew){
+    public static void conversionBack(CardUserInfo cardUserInfo, CardUserInfo cardUserInfoNew) {
         cardUserInfo.setGrossMass(cardUserInfoNew.getGrossMass());
         cardUserInfo.setApprovedPassengersCapacity(cardUserInfoNew.getApprovedPassengersCapacity());
         cardUserInfo.setUnladenMass(cardUserInfoNew.getUnladenMass());