Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Java: logging, masking, sensitive data

Как сделать маскирование чувствительных данных в логах?

Проверяет знание методов защиты конфиденциальной информации при логировании.

Короткий ответ

  1. Использовать библиотеки (например, Logback с кастомными масками).

  2. Регулярные выражения для замены данных (например, \d{16} → ****-****-****-****).

  3. Аннотации (@SensitiveData) для автоматического маскирования.

Длинный ответ

1. Logback с маскирующим конвертером

Пример конфигурации logback.xml:

<configuration>
  <conversionRule conversionWord="mask" converterClass="com.example.MaskConverter" />
  <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%d %mask(%msg)</pattern>
    </encoder>
  </appender>
</configuration>

Класс MaskConverter:

public class MaskConverter extends ClassicConverter {
    @Override
    public String convert(ILoggingEvent event) {
        return event.getMessage()
            .replaceAll("\\b\\d{4}-\\d{4}-\\d{4}-\\d{4}\\b", "****-****-****-****"); // Маскирование карт
    }
}

2. Регулярные выражения в коде

String log = "User card: 1234-5678-9012-3456";
String masked = log.replaceAll("\\b\\d{4}(-\\d{4}){3}\\b", "****-****-****-****");
// Результат: "User card: ****-****-****-****"

3. Аннотации для DTO

public class UserDTO {
    @SensitiveData
    private String password;
    // Геттеры/сеттеры
}

Логика маскирования (например, через AOP):

@Around("execution(* com.example.service.*.*(..))")
public Object maskSensitiveData(ProceedingJoinPoint joinPoint) throws Throwable {
    Object result = joinPoint.proceed();
    if (result instanceof UserDTO) {
        ((UserDTO) result).setPassword("******");
    }
    return result;
}

Вывод:

  • Для простых случаев: Регулярные выражения.

  • Для enterprise-решений: Кастомные конвертеры логов + AOP.

Уровень

  • Рейтинг:

    1

  • Сложность:

    6

Навыки

  • Java

    Java

Ключевые слова

#logging

#masking

#sensitive data

Подпишись на Java Developer в телеграм