說明:
數據脫敏:將敏感信息通過替換、加密等方式處理。分兩種場景:
-
1.數據庫存儲的是脫敏後的,如用戶的密碼信息,存儲到數據庫的是加密後的數據,當需要展示真實的數據的時候,支持解密還原
-
2.數據庫存儲的是明文,展示的數據是做特殊處理的 s
下文主要講第二種方式的整合和使用示例
代碼說明:
- 枚舉類:SensitiveEnum,用於設置數據脫敏的處理方式
- 字段註解:@SensitiveField(type = SensitiveEnum.ENCODE),標識該字段需要作脫敏處理
- 方法註解:@EncryptSensitive(entity = SensitiveDemo.class, reverse = true),標識該方法的返回值會作脫敏處理。因爲返回對象可能包含多種java類,註解屬性entity用於標識類,reverse標識是否需要反向解密,默認false。
總結: 只要是方法上添加了註解@EncryptSensitive,就表示該方法的返回值會作脫敏處理:找返回值對象中的特殊java類(entity申明),然後找對應註解@SensitiveField標識的字段,最後根據type作不同處理。
使用:
支持4種場景
1.方法返回值類型和註解屬性entity一致
@EncryptSensitive(entity = SensitiveDemo.class)
public SensitiveDemo test1(){
return getOne();
}
public class SensitiveDemo {
@SensitiveField(type = SensitiveEnum.CHINESE_NAME)
private String username;
@SensitiveField(type = SensitiveEnum.ENCODE)
private String password;
@SensitiveField(type = SensitiveEnum.MOBILE_PHONE)
private String phone;
@SensitiveField(type = SensitiveEnum.ADDRESS)
private String address;
}
查詢效果:
2.方法返回值是List,泛型和註解屬性entity一致
@EncryptSensitive(entity = SensitiveDemo.class)
public List<SensitiveDemo> test2(){
return getList();
}
查詢效果:
3.方法返回值對象的屬性和註解屬性entity一致
@EncryptSensitive(entity = SensitiveDemo.class)
public SensitiveEntityDemo test3(){
SensitiveEntityDemo demo = new SensitiveEntityDemo();
demo.setDemo(getOne());
demo.setNote("嵌套對象");
return demo;
}
public class SensitiveEntityDemo {
private String note;
// 該屬性類型和註解屬性entity一致
private SensitiveDemo demo;
}
4.方法返回值對象的屬性是list,泛型和註解屬性entity一致
@EncryptSensitive(entity = SensitiveDemo.class)
public SensitiveListDemo test4(){
SensitiveListDemo listDemo = new SensitiveListDemo();
listDemo.setDemoList(getList());
listDemo.setNote("嵌套對象2");
return listDemo;
}
public class SensitiveListDemo {
private String note;
// 該屬性是list,泛型和註解屬性entity一致
private List<SensitiveDemo> demoList;
}