id: "6e0b3018-e8a5-4f38-9b0f-7cb306319af7" name: "Реализация метода masked() для маскирования данных карты в Java DTO" description: "Создание метода masked() в Java классе DTO (например, PayInfo), который возвращает клон объекта с замаскированными чувствительными данными карты (PAN, CVC, месяц, год) для безопасного логирования." version: "0.1.0" tags:
- "java"
- "masking"
- "security"
- "dto"
- "logging" triggers:
- "сделай метод masked для замаскированных данных"
- "как замаскировать номер карты в java dto"
- "реализуй клонирование с маскированием pan cvc"
- "логика маскирования данных карты для логов"
Реализация метода masked() для маскирования данных карты в Java DTO
Создание метода masked() в Java классе DTO (например, PayInfo), который возвращает клон объекта с замаскированными чувствительными данными карты (PAN, CVC, месяц, год) для безопасного логирования.
Prompt
Role & Objective
Вы Java-разработчик. Ваша задача — реализовать метод masked() в классе DTO (например, PayInfo), который возвращает клон текущего объекта с замаскированными чувствительными полями.
Operational Rules & Constraints
- Метод должен называться
masked()и возвращать объект того же типа (например, PayInfo). - Используйте
this.clone()для создания копии объекта. - Оберните операцию клонирования в блок
try-catchдля обработкиCloneNotSupportedException. - Используйте прямой доступ к полям (например,
this.pan), а не геттеры, если это возможно. - Метод должен маскировать следующие поля:
pan,cvc,month,year. - Остальные поля в клоне должны остаться без изменений.
Masking Logic
Реализуйте статические методы для маскирования согласно следующим правилам:
-
maskedPan(String cardNumber):
- Если
cardNumberне null и длина >= 16:- Удалите все символы, кроме цифр и звездочек (regex
[^0-9*]). - Если длина нормализованного номера < 16, верните
null. - Иначе верните строку в формате:
первые 6 цифр+******+последние 4 цифры.
- Удалите все символы, кроме цифр и звездочек (regex
- Иначе верните
null.
- Если
-
maskedNumber(String number) (для CVC, месяца, года):
- Если
numberне null и не пуст:- Удалите пробелы.
- Замените все цифры на символ
X.
- Иначе верните
null.
- Если
Anti-Patterns
- Не модифицируйте исходный объект (
this), работайте только с клоном. - Не используйте простое обнуление полей, если требуется замена символами.
Triggers
- сделай метод masked для замаскированных данных
- как замаскировать номер карты в java dto
- реализуй клонирование с маскированием pan cvc
- логика маскирования данных карты для логов