1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/doobo-spring-sensitive

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Основываясь на springboot, реализовано «обезличивание» данных с помощью двух методов: «модель класса» и «AOP-аннотации». Можно использовать любой из них. Если используются оба метода, то сначала выполняется обезличивание в контроллере, а затем — в модели класса (по умолчанию возвращается представление Jackson).

Метод обезличивания, основанный на AOP, также может быть использован для других методов Spring. Не забудьте включить пакет Spring AOP.

Обезличенные данные могут быть заполнены после передачи их на фронт. Для этого обратитесь к разделу «Заполнение данных», который использует fastJson.

Как использовать

 <dependency>
   <groupId>com.github.doobo</groupId>
   <artifactId>spring-sensitive</artifactId>
   <version>1.3</version>
 </dependency>

Обезличивание с использованием fastJson

/**
 * Обезличивание данных на основе 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

Реализовано на основе 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 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/doobo-spring-sensitive.git
git@api.gitlife.ru:oschina-mirror/doobo-spring-sensitive.git
oschina-mirror
doobo-spring-sensitive
doobo-spring-sensitive
master