Ведение журнала запросов Soap — элегантное решение для исключения конфиденциальных данных

В настоящее время я работаю над приложением, которое использует Apache CXF для отправки запросов третьей стороне. Нам нужно регистрировать каждый отправляемый запрос. Проблема в том, что многие из этих запросов содержат конфиденциальные данные, которые невозможно зарегистрировать. Сами данные обычно шифруются перед отправкой, но мы даже не можем зарегистрировать зашифрованное значение.

Суперпростым решением было бы создать «черный список» полей, которые не должны регистрироваться. Проблема в том, что в постоянно растущем приложении легко пропустить поле.

Что я хочу сделать, так это найти способ «белого списка» полей, которые должны быть зарегистрированы.

Это кажется сложным, но я не могу быть единственным человеком, которому когда-либо приходилось это делать.


person mad_fox    schedule 09.01.2017    source источник
comment
Итак, вы хотите зарегистрировать запрос перед шифрованием и удалением конфиденциальных полей? Не могли бы вы аннотировать каждое поле, чтобы скрыть его, а затем использовать собственный сериализатор?   -  person pedrofb    schedule 09.01.2017
comment
Значения полей шифруются, а не весь запрос, поэтому ведение журнала обычно происходит после того, как поля уже были зашифрованы. Мы не можем аннотировать классы, потому что мы получаем wsdl от третьей стороны. Каждый раз, когда мы перегенерируем классы, нам придется возвращаться и снова добавлять аннотации журналирования к классам.   -  person mad_fox    schedule 09.01.2017
comment
Тогда белый список кажется приемлемым выбором. Черный список опасен, потому что сложно построить набор слов, а поставщик wsdl может изменить имена, которые могут пропустить элемент управления. Может быть, вы можете установить перехватчик после шифрования, чтобы оставить пустыми поля, отсутствующие в белом списке.   -  person pedrofb    schedule 10.01.2017
comment
Значение уже зашифровано, когда оно установлено в объекте, который будет сериализован. Не все значения на самом деле всегда зашифрованы, большинство из них.   -  person mad_fox    schedule 10.01.2017
comment
Поскольку у меня были ограниченные поля, я использовал черный список, вот ссылка на ответ, который я дал несколько лет назад. stackoverflow.com /questions/23212313/ Хотя это может быть неэффективно, но оно охватывает все случаи мыльных полей. Одно улучшение, о котором я могу думать, - это переместить ключи на уровень поля и установить поля во время создания компонента. Может быть, вы можете изменить его на белый список, применив не условие.   -  person Karthik Prasad    schedule 10.01.2017
comment
@mad_fox Я считаю, что с точки зрения производительности черный список должен быть лучше, чем белый список, так как количество полей белого списка будет достаточно большим.   -  person Karthik Prasad    schedule 17.01.2017


Ответы (1)


Я написал инструмент, который позволяет анонимизировать/удалить поддерево на основе подмножества XPath-выражения. Я предполагаю, что более продвинутый подход будет использовать фильтр SAX.

person ThomasRS    schedule 07.12.2017