<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      java自定義注解進行數據脫敏

      前言

      有些時候,我們可能對輸出的某些字段要做特殊的處理在輸出到前端,比如:身份證號,電話等信息,在前端展示的時候我們需要進行脫敏處理,這時候通過自定義注解就非常的有用了。在Jackson中要自定義注解,我們可以通過@JacksonAnnotationsInside注解來實現,如下示例:

      一、自定義注解

      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;
      
      @Target(ElementType.FIELD)
      @Retention(RetentionPolicy.RUNTIME)
      @JacksonAnnotationsInside
      @JsonSerialize(using = SensitiveSerializer.class)
      public @interface Sensitive {
      
          //加密開始位置
          int start()default 0 ;
      
          //加密結束位置
          int end() default 0 ;
      
          //加密掩碼
          String mask() default "*" ;
      }

      二、自定義序列化處理器SensitiveSerializer

      import com.fasterxml.jackson.core.JsonGenerator;
      import com.fasterxml.jackson.databind.BeanProperty;
      import com.fasterxml.jackson.databind.JsonMappingException;
      import com.fasterxml.jackson.databind.JsonSerializer;
      import com.fasterxml.jackson.databind.SerializerProvider;
      import com.fasterxml.jackson.databind.ser.ContextualSerializer;
      import org.springframework.util.StringUtils;
      import java.io.IOException;
      import java.util.Collections;
      
      /**
       * @author songwp
       * @date 2024-11-15
       * @desc 自定義序列化器,用于對敏感字段進行脫敏處理
       */
      public class SensitiveSerializer extends JsonSerializer<String> implements ContextualSerializer {
      
          private Sensitive sensitive;
      
          @Override
          public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
              String val = value;
              if (sensitive != null && StringUtils.hasLength(val)) {
                  String m = sensitive.mask();
                  int start = sensitive.start();
                  int end = sensitive.end();
                  int totalLength = value.length();
                  if (totalLength <= 2) {
                      val = totalLength == 1 ? value + m : value.substring(0, 1) + m;
                  } else if (totalLength <= 6) {
                      val = value.substring(0, 1) + String.join("", Collections.nCopies(totalLength - 2, m)) + value.substring(totalLength - 1);
                  } else {
                      int prefixLength = Math.min(start, totalLength - 1);
                      int suffixLength = Math.min(end, totalLength - 1);
                      if (prefixLength > totalLength) {
                          prefixLength = totalLength / 2;
                      }
                      if (suffixLength > totalLength) {
                          suffixLength = totalLength / 2;
                      }
                      int maskLength = Math.max(0, totalLength - (prefixLength + suffixLength));
                      if (maskLength == 0) {
                          prefixLength -= 2;
                          suffixLength -= 2;
                          maskLength = Math.max(2, totalLength - (prefixLength + suffixLength));
                      }
                      prefixLength = Math.min(prefixLength, totalLength - 1);
                      suffixLength = Math.min(suffixLength, totalLength - 1);
                      maskLength = totalLength - prefixLength - suffixLength;
                      val = value.substring(0, prefixLength) + String.join("", Collections.nCopies(maskLength, m)) + value.substring(totalLength - suffixLength);
                  }
              }
              gen.writeString(val);
          }
      
          @Override
          public JsonSerializer<?> createContextual(SerializerProvider prov, BeanProperty property) throws JsonMappingException {
              sensitive = property.getAnnotation(Sensitive.class);
              return this;
          }
      }

      三、在輸出的Java Bean中使用上面的注解

      import com.fasterxml.jackson.databind.annotation.JsonSerialize;
      import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
      import com.songwp.config.Sensitive;
      import lombok.AllArgsConstructor;
      import lombok.Data;
      import lombok.NoArgsConstructor;
      import java.io.Serializable;
      
      /**
       * @author songwp
       * @version 1.0
       * @date 2024-11-15
       * @description: user domain
       */
      @Data
      @AllArgsConstructor
      @NoArgsConstructor
      public class User implements Serializable {
          @JsonSerialize(using = ToStringSerializer.class)
          private Long id;
          @Sensitive(start = 2, end = 4)
          private String name;
          @Sensitive(start = 6, end = 4)
          private String idCard;
          @Sensitive(start = 4, end = 3)
          private String phone;
      }

      四、在前端展示結果如下:

       敏感數據得到了脫敏處理。

      posted @ 2024-11-15 15:35  [奮斗]  閱讀(454)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产人妻精品午夜福利免费 | 成人特黄特色毛片免费看| 亚洲国产成人资源在线| 粉嫩蜜臀av一区二区绯色| 北条麻妃一区二区三区av高清| 性色在线视频精品| 国产精品一码在线播放| 五月天激情国产综合婷婷婷| 国产裸体无遮挡免费精品| 特级欧美AAAAAAA免费观看| 铜山县| 熟女人妻视频| 大胸美女吃奶爽死视频| 亚洲精品麻豆一二三区| 亚洲精品欧美综合二区| 99在线视频免费观看| 亚洲精品天堂在线观看 | 人人玩人人添人人澡超碰| 国产福利深夜在线播放| 大地资源网第二页免费观看| 亚洲乱码日产精品一二三| 亚洲av无码乱码在线观看野外| 金秀| 日韩av裸体在线播放| 国产精品午夜福利片国产| 男人一天堂精品国产乱码| 亚洲男人在线天堂| 国产高清国产精品国产专区| 久久96热在精品国产高清| 久久精品av国产一区二区| 最新日韩精品视频在线| 亚洲香蕉av一区二区蜜桃| 国产偷窥熟女高潮精品视频| 无套内谢少妇高清毛片| 久久久久国产精品人妻| 国产免费午夜福利片在线| 国产精品欧美福利久久| 看全色黄大色黄大片 视频| 国产福利高颜值在线观看| 忘忧草在线社区www中国中文 | 科技|