日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于注解的字段脱敏处理

發(fā)布時間:2023/12/10 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于注解的字段脱敏处理 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
package io.lgxkdream.test2;import org.apache.commons.lang3.StringUtils;/*** @title: MaskUtils* @description: 掩碼工具類* @Copyright: Copyright (c) 2018* @Company: lgxkdream.github.io* @author gang.li* @version 1.0.0* @since 2018年3月19日 上午10:59:57*/ public class MaskUtils {public static String maskCellphone(String cellphoneNo) {if ((cellphoneNo == null) || (cellphoneNo.trim().length() != 11)) {return cellphoneNo;}return cellphoneNo.substring(0, 3) + "****" + cellphoneNo.substring(cellphoneNo.length() - 4);}public static String maskEmail(String email) {if (StringUtils.isBlank(email)) {return "";}int index = StringUtils.indexOf(email, "@");if (index <= 1)return email;elsereturn StringUtils.rightPad(StringUtils.left(email, 1), index, "*").concat(StringUtils.mid(email, index, StringUtils.length(email)));}private static String maskCardNo(String cardNo) {if ((cardNo == null) || (cardNo.trim().length() <= 8)) {return cardNo;}cardNo = cardNo.trim();int length = cardNo.length();String firstFourNo = cardNo.substring(0, 4);String lastFourNo = cardNo.substring(length - 4);String mask = "";for (int i = 0; i < length - 8; i++) {mask = mask + "*";}return firstFourNo + mask + lastFourNo;}public static String maskIDCardNo(String idCardNo) {return maskCardNo(idCardNo);}public static String maskBankCardNo(String bankCardNo) {return maskCardNo(bankCardNo);}} package io.lgxkdream.test2;import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/*** @title: SensitiveField* @description: 掩碼注解* @Copyright: Copyright (c) 2018* @Company: lgxkdream.github.io* @author gang.li* @version 1.0.0* @since 2018年3月19日 上午11:01:45*/ @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface SensitiveField {SensitiveTypeEnum value() default SensitiveTypeEnum.IDCARD;enum SensitiveTypeEnum {IDCARD,BANKCARD,MOBILE,EMAIL,CVV;}} package io.lgxkdream.test2;import java.lang.reflect.Field;import org.apache.commons.lang3.builder.ReflectionToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle;/*** @title: SensitiveReflectionToStringBuilder* @description: 重寫用于toString的ReflectionToStringBuilder* @Copyright: Copyright (c) 2018* @Company: lgxkdream.github.io* @author gang.li* @version 1.0.0* @since 2018年3月19日 上午11:06:20*/ public class SensitiveReflectionToStringBuilder extends ReflectionToStringBuilder {public SensitiveReflectionToStringBuilder(Object object, ToStringStyle style) {super(object, style);}@Overrideprotected Object getValue(Field field) throws IllegalArgumentException, IllegalAccessException {if (field.getType() == String.class && field.isAnnotationPresent(SensitiveField.class)) {String v = (String) field.get(this.getObject());switch (field.getAnnotation(SensitiveField.class).value()) {case IDCARD:return MaskUtils.maskIDCardNo(v);case BANKCARD:return MaskUtils.maskBankCardNo(v);case MOBILE:return MaskUtils.maskCellphone(v);case EMAIL:return MaskUtils.maskEmail(v);case CVV:return v == null ? null : "***";default:return v;}}return field.get(this.getObject());}} package io.lgxkdream.test2;import org.apache.commons.lang3.builder.ToStringStyle;import io.lgxkdream.test2.SensitiveField.SensitiveTypeEnum;/*** @title: MyEntity* @description: 測試實體* @Copyright: Copyright (c) 2018* @Company: lgxkdream.github.io* @author gang.li* @version 1.0.0* @since 2018年3月19日 上午11:21:04*/ public class MyEntity {/*** 證件號*/@SensitiveFieldprivate String idNo;/*** 手機號*/@SensitiveField(SensitiveTypeEnum.MOBILE)private String mobile;/*** 姓名*/private String name;/*** 郵箱*/@SensitiveField(SensitiveTypeEnum.EMAIL)private String email;public String getIdNo() {return idNo;}public void setIdNo(String idNo) {this.idNo = idNo;}public String getMobile() {return mobile;}public void setMobile(String mobile) {this.mobile = mobile;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}@Overridepublic String toString() {return new SensitiveReflectionToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE).toString();}} package io.lgxkdream.test2;/*** @title: MyTest* @description: 測試類* @Copyright: Copyright (c) 2018* @Company: lgxkdream.github.io* @author gang.li* @version 1.0.0* @since 2018年3月19日 上午11:21:22*/ public class MyTest {public static void main(String[] args) {MyEntity entity = new MyEntity();entity.setIdNo("220222196309129847");entity.setMobile("15764132696");entity.setName("張三");entity.setEmail("2392374239@qq.com");System.out.println(entity.toString());// 測試結(jié)果:MyEntity[idNo=2202**********9847,mobile=157****2696,name=張三,email=2*********@qq.com]}}


總結(jié)

以上是生活随笔為你收集整理的基于注解的字段脱敏处理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。