思路:如果我有一个复杂的对象,那么这个对象每个属性的值,我肯定是已知的,而且它的字段类型是已知的,字段的返回值是已知的,对象的类注解,字段的注解,方法的注解我都能拿到(利用反射)那么问题是不是就变的简单很多呢?
因为我可以利用注解,在我想要实现脱敏的字段上加上指定注解,然后最后拿到的value,利用反射给他set回去,那么这样是不是就实现了呢?下面看代码如何实现的!
代码:
@Target({
ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Desensitized {
/*脱敏类型(规则)*/
SensitiveTypeEnum type();
/*判断注解是否生效的方法*/
String isEffictiveMethod() default "";
}
package com.danny.log.desensitized.entity;
import com.danny.log.desensitized.annotation.Desensitized;
import com.danny.log.desensitized.enums.SensitiveTypeEnum;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* @author huyuyang@lxfintech.com
* @Title: BaseUserInfo
* @Copyright: Copyright (c) 2016
* @Description:
* @Company: lxjr.com
* @Created on 2017-06-07 15:19:23
*/
public class BaseUserInfo extends BaseEntity{
private List<Map> mapList;
private List<String> strList;
private Map<String,UserTypeEnum> map;
private List<UserService> userServiceList;
private ILimitKey iLimitKey;
private UserTypeEnum userType;
private static final long serialVersionUID = -3387516993124229938L;
private UserService userService;
@Desensitized(type = SensitiveTypeEnum.CHINESE_NAME)
private String realName;
@Desensitized(type = SensitiveTypeEnum.ID_CARD)
private String idCardNo;
@Desensitized(type = SensitiveTypeEnum.MOBILE_PHONE)
private String mobileNo;
private String account;
@Desensitized(type = SensitiveTypeEnum.PASSWORD, isEffictiveMethod = "isEffictiveMethod")
private String password;
@Desensitized(type = SensitiveTypeEnum.BANK_CARD)
private String bankCardNo;
@Desensitized(type = SensitiveTypeEnum.EMAIL)
private String email;
private String extend1;
private Integer extend2;
private BigDecimal extend3;
private Date extend4;
public UserService getUserService() {
return userService;
}
public BaseUserInfo setUserService(UserService userService) {
this.userService = userService;
return this;
}
public UserTypeEnum getUserType() {
return userType;
}
public BaseUserInfo setUserType(UserTypeEnum userType) {
this.userType = userType;
return this;
}
public String getRealName() {
return realName;
}
public BaseUserInfo setRealName(String realName) {
this.realName = realName;
return this;
}
public String getIdCardNo() {
return idCardNo;
}
public BaseUserInfo setIdCardNo(String idCardNo) {
this.idCardNo = idCardNo;
return this;
}
public String getMobileNo() {
return mobileNo;
}
public BaseUserInfo setMobileNo(String mobileNo) {
this.mobileNo = mobileNo;
return this;
}
public String getAccount() {
return account;
}
public BaseUserInfo setAccount(String account) {
this.account = account;
return