@autowired注解 抽象类_通用脱敏注解+策略模式应用

策略模式+自定义脱敏注解轻松实现脱敏功能

543c294cb9996f7998cdfc1c75f84113.png

一、定义注解及其通用类型

1、定义脱敏注解 @SensitiveField

import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@JsonSerialize(using = SensitiveInfoSerialize.class)
@JacksonAnnotationsInside
public @interface SensitiveField {

/**
* 脱敏类型
* @return
*/
SensitiveType type() default SensitiveType.NULL;

/**
* 前部显示字符个数
* @return
*/
int prefix() default 4;

/**
* 尾部显示字符个数
* @return
*/
int suffix() default 3;

/**
* 星号个数
* @return
*/
int split() default 3;
}

2、定义脱敏类型 SensitiveType.class

public enum SensitiveType {
    

/**
* 中文名
*/
CHINESE_NAME,

/**
* 身份证号
*/
ID_CARD,

/**
* 座机号
*/
FIXED_PHONE,

/**
* 手机号
*/
MOBILE_PHONE,

/**
* 电子邮件
*/
EMAIL,

/**
* 银行卡
*/
BANK_CARD,

/**
* 公司开户银行联号
*/
CNAPS_CODE,

/**
* 不脱敏
*/
NULL;
}

二、定义配置文件及拦截器

1、配置文件类 SensitiveInfoProperties.class

import org.springframework.boot.context.properties.ConfigurationProperties;

/**
* 默认为启用状态,若是配置文件中配置为禁用,则会触发拦截器
*/
@ConfigurationProperties(prefix = SensitiveInfoProperties.FIELD_SENSITIVE_PREFIX)
public class SensitiveInfoProperties {

/**
* 默认的数据脱敏配置前缀
*/
public final static String FIELD_SENSITIVE_PREFIX = "tomcoder.sensitive";

/**
* 脱敏配置是否启用标识_value
*/
public final static String FIELD_SENSITIVE_DISABLE_VALUE = "true";

/**
* 脱敏配置是否启用标识_key
*/
public final static String FIELD_SENSITIVE_KEY = "disable";

/**
* 是否启用脱敏标识(value默认true启用)
*/
private String disable = FIELD_SENSITIVE_DISABLE_VALUE;

public String getDisable() {
return disable;
}

public void setDisable(String disable) {
this.disable = disable;
}
}

2、禁用拦截类 DisableSensitiveInfoIntrospector.class

import com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector;
import java.lang.annotation.Annotation;

/**
* 拦截器生效时,注解为@SensitiveField 不生效(返回false)
* JacksonAnnotationIntrospector 为序列化时的拦截器接口
*/
public class DisableSensitiveInfoIntrospector extends JacksonAnnotationIntrospector {
private static final long serialVersionUID = 5915688650237481024L;

@Override
public boolean isAnnotationBundle(Annotation ann) {
if (ann.annotationType().equals(SensitiveField.class)) {
return false;
} else {
return super.isAnnotationBundle(ann);
}
}
}

3、处理配置并依赖注入拦截器类 SensitiveInfoConfiguration.class

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值