Основываясь на springboot, реализовано «обезличивание» данных с помощью двух методов: «модель класса» и «AOP-аннотации». Можно использовать любой из них. Если используются оба метода, то сначала выполняется обезличивание в контроллере, а затем — в модели класса (по умолчанию возвращается представление Jackson).
Метод обезличивания, основанный на AOP, также может быть использован для других методов Spring. Не забудьте включить пакет Spring AOP.
Обезличенные данные могут быть заполнены после передачи их на фронт. Для этого обратитесь к разделу «Заполнение данных», который использует fastJson.
<dependency>
<groupId>com.github.doobo</groupId>
<artifactId>spring-sensitive</artifactId>
<version>1.3</version>
</dependency>
/**
* Обезличивание данных на основе fastJson
*/
@DesensitizationParams({
@DesensitizationParam(type = SensitiveType.NULL, fields = {"id","address"}),
@DesensitizationParam(type = SensitiveType.MOBILE_PHONE, fields = {"phone", "idCard"}),
@DesensitizationParam(type = SensitiveType.BANK_CARD, fields = "$..bankCard", mode = HandleType.RGE_EXP),
@DesensitizationParam(regExp = "(?<=\\w{2})\\w(?=\\w{1})", fields = "$[0].idCard2", mode = HandleType.RGE_EXP)
})
@GetMapping("fast")
public List<UserDesensitization> sensitive(){
return Arrays.asList(new UserDesensitization(), new UserDesensitization());
}
Реализовано на основе Jackson JsonSerialize.
@Data
public class UserSensitive {
@SensitiveInfo(value = SensitiveType.CHINESE_NAME)
String name = "张三";
@SensitiveInfo(value = SensitiveType.ID_CARD)
String idCard = "430524202012120832";
@SensitiveInfo(regExp = "(?<=\\w{3})\\w(?=\\w{4})")
String idCard2 = "430524202012120832";
@SensitiveInfo(value = SensitiveType.MOBILE_PHONE)
String phone = "1234567890";
@SensitiveInfo(value = SensitiveType.FIXED_PHONE)
String ext = "0739-8888888";
@SensitiveInfo(value = SensitiveType.ADDRESS)
String address = "湖南省长沙市高新区岳麓大道芯城科技园";
@SensitiveInfo(value = SensitiveType.NULL)
String address2 = "湖南省";
@SensitiveInfo(value = SensitiveType.BANK_CARD)
String bankCard = "622260000027736298837";
@SensitiveInfo(value = SensitiveType.NULL)
Integer id = 654321;
}
@SpringBootTest
public class ApplicationTests {
/**
* Тестирование обезличивания с использованием jackson
* @throws JsonProcessingException
*/
@Test
void testSensitive() throws JsonProcessingException {
UserSensitive user = new UserSensitive();
ObjectMapper objectMapper = new ObjectMapper();
String str = objectMapper.writeValueAsString(user);
System.out.println(str);
}
}
Некоторые обезличенные данные, переданные на фронт, необходимо заполнить при передаче обратно на сервер. Например, некоторые идентификаторы пользователей, номера телефонов и т. д.
/**
* IndexController.java
* Заполнение данных, по умолчанию используется первый параметр
* @param pt1
* @param pt2
*/
@HyposensitizationParams({
@HyposensitizationParam(type = "card", fields = "bankCard"),
@HyposensitizationParam(argName = "a", type = "string"),
@HyposensitizationParam(argName = "pt1", type = "phone", fields = {"idCard","phone"}),
@HyposensitizationParam(argName = "pt2", type = "reg", fields = {"$..address", "$.bankCard"}, mode = HandleType.RGE_EXP)
})
@GetMapping("undo")
public String Hyposensitization(UserDesensitization pt1, UserSensitive pt2, String a){
return JSON.toJSONString(Arrays.asList(pt1, pt2, a));
}
//PtoUndoObserver.java
@Component
public class PtoUndoObserver extends UndoObserver {
/**
* Возвращает True для выполнения undoValue
*/
@Override
public boolean matching(UndoVO vo) {
return "card".equals(vo.getType()) || "reg".equals(vo.getType());
}
/**
* Если это базовый тип параметра и параметр пуст, без адреса памяти, содержимое не заменяется
* Наследует наблюдателя, можно заполнить метод ввода
*/
@Override
public void undoValue(UndoVO vo) {
if (vo.getType().equals("card")) {
vo.undo("...1");
}
if (vo.getType().equals("phone")) {
vo.undo("......2");
}
if (vo.getType().equals("reg")) {
vo.undo('.');
}
if(vo.getType().equals("string")){
vo.undo("............4");
}
if(vo.getType().equals("obj")){
vo.undo(new SingleObj().setAuthor("............5"));
}
}
}
``` **Аннотация:** SensitiveService {
@Override
public String idCardNum(String idCardNum, int front, int end) {
return super.idCardNum(idCardNum, front, end);
}
@Override
public String selfFastJsonHandler(String input, DesensitizationParam param) {
if("self".equals(param.tag())){
return "fastJsonSelfHandler:" + input;
}
return input;
}
@Override
public String selfJacksonHandler(String input, SensitiveInfo param) {
return "JacksonHandler:" + input;
}
}
sensitive:
enableFastFilter: true
enableJackFilter: true
enableUndoFilter: true
Описание: Здесь представлен код на языке программирования, который описывает абстрактный класс SensitiveService с тремя методами: idCardNum(), selfFastJsonHandler() и selfJacksonHandler(). Также представлен фрагмент конфигурации в формате YAML, который определяет параметры для работы системы.
Примечание: В запросе присутствуют фрагменты кода и конфигурация, но нет информации о контексте их использования или назначении.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )