# Blur
[English](README.md) | 简体中文
Blur 是一个基于注解的 Java 数据脱敏库,支持字符串、对象字段、集合、数组和 Map 中的敏感数据。
使用灵活,支持以下脱敏类型:
* **字符串**
* **姓名**
* **密码**
* **电子邮箱**
* **电话号码**
* **身份证号**
* **银行卡号**
* **级联脱敏**
* **基于自定义注解的脱敏**
# 使用
## JDK 版本
Blur 需要 JDK 25 或更高版本。使用旧版 JDK 的项目,可参考兼容 Java 8 的 [v2.4.6 使用指南](https://github.com/allurx/blur/tree/v2.4.6)。
## Maven 依赖
将 `LATEST_VERSION` 替换为 Maven Central 上列出的最新版本:
<dependency>
<groupId>io.allurx</groupId>
<artifactId>blur</artifactId>
<version>LATEST_VERSION</version>
</dependency>
## 示例
### 对象字段脱敏
下面的 `Person` 类包含敏感字段,以及需要级联处理的嵌套对象。
```java
public class Person {
@Name
public String name = "allurx";
@PhoneNumber
public String phoneNumber = "19962000001";
@Password
public String password = "123456789";
@Cascade
public Father father;
}
```
为敏感字段添加 `@Name`、`@PhoneNumber`、`@Password` 等注解;需要级联脱敏的对象字段使用 `@Cascade`。
调用以下方法,按配置的规则处理字段并返回新实例:
```java
var person = Blur.blur(new Person());
```
### 值脱敏
`String`、`Collection`、`Array` 和 `Map` 同样支持脱敏。
```java
void blur() {
// String
var v1 = Blur.blur("123456@qq.com", new AnnotatedTypeToken<@Email String>() {
});
assertEquals("1*****@qq.com", v1);
// Collection
var v2 = Blur.blur(Stream.of("123456@qq.com").collect(Collectors.toList()), new AnnotatedTypeToken>() {
});
v2.forEach(s -> assertEquals("1*****@qq.com", s));
// Array
var v3 = Blur.blur(new String[]{"123456@qq.com"}, new AnnotatedTypeToken<@Email String[]>() {
});
Arrays.stream(v3).forEach(s -> assertEquals("1*****@qq.com", s));
// Map
var v4 = Blur.blur(Stream.of("allurx").collect(Collectors.toMap(s -> s, s -> "123456@qq.com")), new AnnotatedTypeToken