敏感信息隐位

在金融系统,客户的姓名、电话、身份证、卡号都必须保密;下面是几种隐位、涉及各种类型的报文,用正则屏蔽差异性

public class HiddenFieldUtil {
    //日志
    private static final Logger logger = LoggerFactory.getLogger(HiddenFieldUtil.class);
    // 证件号隐位处理器
    private static final HiddenFieldHandler.HiddenFieldHandlerInterface HIDDEN_ACCOUNTNO_HANDLER = new HiddenFieldHandler.HiddenAccountNoHandler();
    // 名字隐位处理器
    private static final HiddenFieldHandler.HiddenFieldHandlerInterface HIDDEN_NAME_HANDLER = new HiddenFieldHandler.HiddenAccountNameHandler();
    // 身份证隐位处理器
    private static final HiddenFieldHandler.HiddenFieldHandlerInterface HIDDEN_CERTNO_HANDLER = new HiddenFieldHandler.HiddenCertificateNoHandler();
    // 手机号码隐位处理器
    private static final HiddenFieldHandler.HiddenFieldHandlerInterface HIDDEN_PHONE_HANDLER = new HiddenFieldHandler.HiddenPhoneNoHandler();

    /**
     * 账户号隐位
     *
     * @param accountNo 账户号
     * @return
     */
    public static String hidingAccountNo(String accountNo) {
        return HIDDEN_ACCOUNTNO_HANDLER.hiddenField(accountNo);
    }

    /**
     * 姓名隐位处理
     *
     * @param accountName 账户名
     * @return
     */
    public static String hidingName(String accountName) {
        return HIDDEN_NAME_HANDLER.hiddenField(accountName);
    }

    /**
     * 身份证隐位处理
     *
     * @param certNo 身份证号码
     * @return
     */
    public static String hidingCertificateNo(String certNo) {
        return HIDDEN_CERTNO_HANDLER.hiddenField(certNo);
    }

    /**
     * 手机号码隐位
     *
     * @param phoneNo 手机号
     * @return
     */
    public static String hidingPhoneNo(String phoneNo) {
        return HIDDEN_PHONE_HANDLER.hiddenField(phoneNo);
    }

    /**
     * 隐位数字
     *
     * @param xmlStr     原始报文 xml格式
     * @param fieldNames 里面四个值(节点),1,accountNo, 2,accountName,3,certificateNo ,4,phoneNo
     * @return
     */
    public static String hiddenInfoForXmlFormat(String xmlStr, String[] fieldNames) {
        try {
            if (!checkStringIfNotEmpty(xmlStr)) return ""; //报文为空直接返回
            if (fieldNames == null || fieldNames.length == 0) return xmlStr; //无需隐位
            StringBuilder sb = new StringBuilder(xmlStr);
            if (fieldNames.length >= 1 && checkStringIfNotEmpty(fieldNames[0]))
                sb = hiddenFiledForXmlFormat(sb, fieldNames[0], HIDDEN_ACCOUNTNO_HANDLER);//处理账号
            if (fieldNames.length >= 2 && checkStringIfNotEmpty(fieldNames[1]))
                sb = hiddenFiledForXmlFormat(sb, fieldNames[1], HIDDEN_NAME_HANDLER); //处理名字
            if (fieldNames.length >= 3 && checkStringIfNotEmpty(fieldNames[2]))
                sb = hiddenFiledForXmlFormat(sb, fieldNames[2], HIDDEN_CERTNO_HANDLER); //处理身份证号
            if (fieldNames.length >= 4 && checkStringIfNotEmpty(fieldNames[3]))
                sb = hiddenFiledForXmlFormat(sb, fieldNames[3], HIDDEN_PHONE_HANDLER);//处理手机号
            return sb.toString();
        } catch (Exception e) {
            logger.error("hiddenInfoForXmlFormat failed:{}", xmlStr, e);
            return "";
        }
    }

    /**
     * 隐位字段
     *
     * @param sb                 原始报文 xml格式
     * @param fieldName          需隐位的字段名
     * @param hiddenFieldHandler 隐位处理器
     * @return
     */
    public static StringBuilder hiddenFiledForXmlFormat(StringBuilder sb, String fieldName, HiddenFieldHandler.HiddenFieldHandlerInterface hiddenFieldHandler) {
        try {
            int startIndex = sb.indexOf("<" + fieldName + ">");
            if (startIndex != -1) {
                int endIndex = sb.indexOf("</" + fieldName + ">");
                int valueStartIndex = startIndex + ("<" + fieldName + ">").length();
                String value = sb.substring(valueStartIndex, endIndex);
                return sb.replace(valueStartIndex, endIndex, hiddenFieldHandler.hiddenField(value));
            }
            return sb;
        } catch (Exception e) {
            logger.error("hiddenFiledForXmlFormat failed,xmlStr:{},fieldName:{}", sb.toString(), fieldName, e);
            return new StringBuilder("");
        }
    }

    public static boolean checkStringIfNotEmpty(String param) {
        return null != param && !"".equals(param.trim());
    }
}
public class HiddenFieldHandler {

    public static class HiddenAccountNoHandler implements HiddenFieldHandlerInterface {
        @Override
        public String hiddenField(String accountNo) {
            try {
                //显示前四位,后四位
                StringBuffer accountAlias = new StringBuffer();
                if (HiddenFieldUtil.checkStringIfNotEmpty(accountNo)) {
                    accountAlias.append("****").append(accountNo.substring(accountNo.length() - 4));
                }
                return accountAlias.toString();
            } catch (Exception e) {
                return "accountNo format wrong";
            }
        }
    }

    public static class HiddenAccountNameHandler implements HiddenFieldHandlerInterface {
        @Override
        public String hiddenField(String accountName) {
            try {
                //第一位用*代替
                StringBuffer nameAlias = new StringBuffer();
                if (HiddenFieldUtil.checkStringIfNotEmpty(accountName)) {
                    nameAlias.append("*").append(accountName.substring(1));
                }
                return nameAlias.toString();
            } catch (Exception e) {
                return "accountName format wrong";
            }
        }
    }

    public static class HiddenCertificateNoHandler implements HiddenFieldHandlerInterface {
        @Override
        public String hiddenField(String certNo) {
            try {
                //显示一位跟最后一位
                String certNoStr = "";
                if (HiddenFieldUtil.checkStringIfNotEmpty(certNo)) {
                    certNoStr = certNo.substring(0, 1) + "****************" + certNo.substring(certNo.length() - 1);
                }
                return certNoStr;
            } catch (Exception e) {
                return "certificateNo format wrong";
            }
        }
    }

    public static class HiddenPhoneNoHandler implements HiddenFieldHandlerInterface {
        @Override
        public String hiddenField(String phoneNo) {
            try {
                //显示前三位,后四位
                String phoneAlias = "";
                if (HiddenFieldUtil.checkStringIfNotEmpty(phoneNo)) {
                    phoneAlias = phoneNo.substring(0, 3) + "****" + phoneNo.substring(phoneNo.length() - 4);
                }
                return phoneAlias;
            } catch (Exception e) {
                return "phone format wrong";
            }
        }
    }

    public static interface HiddenFieldHandlerInterface {
        /**
         * 隐藏字段
         *
         * @param field 需要隐藏的字段
         * @return
         */
        String hiddenField(String field);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值