属性加密注解

1.创建注解

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Security {
    String type() default "dh";
}

2.属性加入注解

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Person {
    private String name;
    private int age;
    private Card card;
}
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Card {
    private String cardNo;
    @Security // 加入加密注解,默认使用dh加密
    private String password;
    private Person person;
}

3.解析和测试注解

public class Test {
    public static void main(String[] args) throws IllegalAccessException {
        Card card = new Card("123456", "Abc123++", new Person("aaa", 12, new Card("123", "999", null)));
        Person person = new Person("sean", 12, card);
        // 进行加密
        encryPwd(person);
        System.out.println(person);
    }

    public static void encryPwd(Object obj) throws IllegalAccessException {
        // 获取所有属性
        Field[] fields = obj.getClass().getDeclaredFields();
        for (Field field : fields) {
            if (field == null||field.getType()==null) {
                continue;
            }
            // 将私有属性设为可见
            field.setAccessible(true);
            // 若属性值为空,则不处理
            if (null == field.get(obj)) {
                continue;
            }
            // 若属性有该注解,且属性为字符串类型,则根据对应的加密方式进行加密
            if (field.isAnnotationPresent(Security.class) && field.getType().equals(String.class)) {
                // 获取加密方式
                String type = field.getAnnotation(Security.class).type();
                switch (type) {
                    case "dh":
                        // 可自定义加密
                        field.set(obj, "ttt" + field.get(obj));
                        break;
                    default:
                        break;
                }
            // 若属性不是基本类型,且存在多个属性,则继续调用进行加密处理
            } else if (!field.getType().isPrimitive() && null != field.getType().getDeclaredFields() && field.getType().getDeclaredFields().length > 0) {
                encryPwd(field.get(obj));
            }
        }
    }
}

注:该注解加密只能用于String字符串类型的属性进行加密

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值