#java #spring
#java #весна
Вопрос:
Zalando.В журнале есть несколько фильтров маски по умолчанию, но я не нашел ни одного для XML-тел. Мне нужно замаскировать поле пароля ( <password>1234<password>
-> <password>masked<password>
) в теле xml. Реализовал ли какой-либо орган фильтр тела, который может маскировать пароль в теле xml?
@Bean
public Logbook getLogBook() {
final Set<String> properties = new HashSet<>(Arrays.asList("password");
return Logbook.builder()
.bodyFilter(BodyFilters.replaceFormUrlEncodedProperty(properties, "<masked>"))
.build();
}
Ответ №1:
В источниках журнала журнала есть класс для сжатия XML-файлов : org.zalando.logbook.CompactingXmlBodyFilter
.
Просто скопируйте и вставьте его и создайте свою собственную реализацию преобразования XML, как в removeEmptyTextNodes()
.
Например:
class LogbookXmlBodyPasswordFilter implements BodyFilter {
[...]
private void removePasswordTag(final Document document) throws Exception {
final XPathFactory xPathFactory = XPathFactory.newInstance();
final XPath xpath = xPathFactory.newXPath();
NodeList nodeList = (NodeList) xpath.evaluate("Password", document, XPathConstants.NODESET);
for (int i = 0; i < nodeList.getLength(); i ) {
final Node node = nodeList.item(i);
node.getParentNode().removeChild(node);
}
}
}
Этот метод удалит любой <Password>
тег из XML.
Затем вы можете использовать его следующим образом:
@Bean
public BodyFilter bodyFilter() {
return logbookXmlBodyPasswordFilter();
}
public static BodyFilter logbookXmlBodyPasswordFilter() {
return new LogbookXmlBodyPasswordFilter();
}