Я создаю проект, который подключается к нескольким сторонним API. Итак, в качестве аудита я отслеживаю все запросы и ответы, отправляемые в эти API и из них. Эти запросы и ответы имеют вид XML. И эти XML запросы и ответы содержат некоторую конфиденциальную информацию, которую мне нужно маскировать, например, PII и номера кредитных карт.
Это примеры тегов, которые доступны в XML
<myTag>someSensitiveInformation</myTag>
<myTag sensitiveInfo = foo, sensitiveTwo = bar>SomeOtherSensitiveInfo</myTag>
<myTag sensitiveInfo = foo, sensitiveTwo = bar>
Я могу замаскировать их с помощью следующего регулярного выражения
(<myTag)([\s\S]*?)(\/>)|(<myTag)([\s\S]*?)(>)([\s\S]+?)(<\/myTag>)
И маскированные теги во всех вышеупомянутых случаях будут выглядеть так:
<myTag>*************</myTag>
Это сработало нормально. Но когда трафик c высокий, эта оценка регулярных выражений приводит к скачкам ЦП, и иногда весь проект останавливается. Некоторые из этих XML запросов и ответов имеют размер около 100 КБ. У меня есть несколько запросов и ответов, соответствующих одной пользовательской операции, и все они должны быть замаскированы из приведенного выше регулярного выражения, и это происходит, когда в моем проекте есть низкий трафик c.
Есть ли оптимизированный способ сделать это. И да, я знаю, что регулярное выражение не рекомендуется для XML идентификации тегов, но это, кажется, самый простой подход. Любые внешние библиотеки, которые выполняют такого рода маскирование без снижения производительности, я предпочитаю не использовать маскировку log4j
, поскольку она, по-видимому, накапливает журналы внутри JVM. Или какое было бы подходящее решение в java для такого рода сценариев ios.
Заранее спасибо.