SpringBoot Map接收加密参数值 进行统一解密转换工具类

1、工具类

/**
 * @Description //TODO
 * @Date 2020/3/5 16:06
 * @Author huangwb
 **/
public class MapDecodeValueUtils {
    /**
     * @return void
     * @Author huangwb
     * @Description //TODO 解密map中的value
     * @Date 2020/3/5 15:55
     * @Param [map 参数]
     **/
    public static <V> void mapDecodeValue(Map<String, V> map) {
        if (map == null) {
            return;
        }
        mapDecodeValue(map, null, null, null);
    }

    /**
     * @return void
     * @Author huangwb
     * @Description //TODO 解密map中的value
     * @Date 2020/3/5 15:55
     * @Param [map 参数, mustFillField 必填字段(多个逗号隔开), mustFillFieldMessage 必填字段为空提示信息(多个逗号隔开)]
     **/
    public static <V> void mapDecodeValue(Map<String, V> map, String notEncodeField) {
        if (map == null) {
            return;
        }
        mapDecodeValue(map, null, notEncodeField, null);
    }

    /**
     * @return void
     * @Author huangwb
     * @Description //TODO 解密map中的value
     * @Date 2020/3/5 15:55
     * @Param [map 参数, mustFillField 必填字段(多个逗号隔开), mustFillFieldMessage 必填字段为空提示信息(多个逗号隔开)]
     **/
    public static <V> void mapDecodeValue(Map<String, V> map, String mustFillField, String mustFillFieldMessage) {
        if (map == null) {
            return;
        }
        mapDecodeValue(map, mustFillField, null, mustFillFieldMessage);
    }

    /**
     * @return void
     * @Author huangwb
     * @Description //TODO 解密map中的value
     * @Date 2020/3/5 15:55
     * @Param [map 参数, mustFillField 必填字段(多个逗号隔开), notEncodeField 不需要解密字段(多个逗号隔开), mustFillFieldMessage 必填字段为空提示信息(多个逗号隔开)]
     **/
    public static <V> void mapDecodeValue(Map<String, V> map, String mustFillField, String notEncodeField, String mustFillFieldMessage) {
        if (map == null) {
            return;
        }
        //验证mustFillField(必填字段)和mustFillFieldMessage(必填字段为空提示信息)总数是否相等
        //验证mustFillField(必填字段)在map中是否存在为空的情况 如果存在为空则mustFillFieldMessage(必填字段为空提示信息)报出异常信息
        isValidateMustFillField(map, mustFillField, mustFillFieldMessage);
        //不加密字段集合
        List<String> notEncodeFieldList = null;
        if (!Strings.isNullOrEmpty(notEncodeField)) {
            String[] notEncodeFieldSplit = notEncodeField.split(",");
            notEncodeFieldList = Arrays.asList(notEncodeFieldSplit);
        }
        Iterator<Map.Entry<String, V>> iterator = map.entrySet().iterator();
        while (iterator.hasNext()) {
            Map.Entry<String, V> next = iterator.next();
            V value = next.getValue();
            if (value != null && !Strings.isNullOrEmpty(value.toString())) {
                String key = next.getKey();
                //如果为不加密字段
                if (notEncodeFieldList != null && !notEncodeFieldList.isEmpty() && notEncodeFieldList.contains(key)) {
                    map.put(key, value);
                } else {
                    map.put(key, (V) Base64Utils.decode(value.toString()));
                }
            }
        }
    }

    /**
     * @return void
     * @Author huangwb
     * @Description //TODO  验证mustFillField(必填字段)和mustFillFieldMessage(必填字段为空提示信息)总数是否相等
     * //TODO 验证mustFillField(必填字段)在map中是否存在为空的情况 如果存在为空则mustFillFieldMessage(必填字段为空提示信息)报出异常信息
     * @Date 2020/3/5 16:22
     * @Param [map(参数), mustFillField(必填字段), mustFillFieldMessage(必填字段为空提示信息)]
     **/
    private static <V> void isValidateMustFillField(Map<String, V> map, String mustFillField, String mustFillFieldMessage) {
        if (map == null) {
            return;
        }
        //如果没有必填字段
        if (Strings.isNullOrEmpty(mustFillField)) {
            return;
        }
        if (Strings.isNullOrEmpty(mustFillFieldMessage)) {
            throw new RuntimeException("请填写提示信息!");
        }
        //将多个逗号隔开的参数转换成数组
        String[] mustFillFieldSplit = mustFillField.split(",");
        String[] mustFillFieldMessageSplit = mustFillFieldMessage.split(",");
        //判断所需的字段和提示信息总数是否匹配
        if (mustFillFieldSplit.length != mustFillFieldMessageSplit.length) {
            throw new RuntimeException("所需的字段和提示信息总数不相匹配!");
        }
        List<String> mustFillFieldList = Arrays.asList(mustFillFieldSplit);
        List<String> mustFillFieldMessageList = Arrays.asList(mustFillFieldMessageSplit);
        for (int i = 0; i < mustFillFieldList.size(); i++) {
            String data = mustFillFieldList.get(i);
            V mapValue = map.get(data);
            if (mapValue == null || Strings.isNullOrEmpty(mapValue.toString())) {
                throw new NotNullException(mustFillFieldMessageList.get(i));
            }
        }
    }
}

2、用法

//map中的key对应的值都进行解密 且进行参数二的空值字段校验
//第一个参数 接收的map
//第二个参数 必填字段
//第三个参数必填字段说明
MapDecodeValueUtils.mapDecodeValue(map
        , "targetId,userId,targetType"
        , "目标id不能为空,用户id不能为空,目标类型不能为空");
//除了参数三中对应的key,其他map中的key对应的值都进行解密 且进行参数二的空值字段校验
//第一个参数 接收的map
//第二个参数 必填字段
//第三个参数 不进行解密的字段
//第四个参数 必填字段说明
MapDecodeValueUtils.mapDecodeValue(map,"targetId,userId,targetType"
        ,"page,pageSize","目标id不能为空,用户id不能为空,目标类型不能为空");
//除了参数二中对应的key,其他map中的key对应的值都进行解密
//第一个参数 接收的map
// 第二个参数 不进行解密的字段
MapDecodeValueUtils.mapDecodeValue(map,"page,pageSize");
//整个map中所有的key对应的值都进行解密 不做任何空值判断
// 第一个参数 接收的map
MapDecodeValueUtils.mapDecodeValue(map);

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

难搞哦!!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值