Редактировать конфиденциальную информацию при использовании ServiceStack.Text для сериализации в файлы журналов
Я использую ServiceStack.Text
а также ServiceStack.Logging.NLog
регистрировать запросы DTO, отправленные в / из веб-службы из клиентского приложения.NET. Хотя машины в целом безопасны, я бы хотел отредактировать конфиденциальную информацию, которая может храниться в виде обычного текста (например, имя, адрес, основные права доступа и т. Д.).
Я смотрел на различные JsConfig<T>
методы, но кажется, что я должен был бы реализовать SerializeFn<T>
для каждого DTO. В "пропущенном" есть риск, и я хотел бы применить его только к области ведения журнала.
Я смотрел на NLog
фильтры и when
только изменяет, зарегистрировано ли сообщение.
Есть ли какой-нибудь универсальный способ замены чувствительных свойств / ключей / атрибутов маркером редактирования при регистрации DTO с ServiceStack.Logging
\ NLog
?
1 ответ
Нет никаких параметров сериализатора с областью действия, которые изменяют, какие поля должны быть сериализованы.
Возможные решения, на которые я обращаю внимание, - это сохранение белого списка типов DTO с конфиденциальной информацией, которую не следует регистрировать, или использование отражения для установки свойств, которые вы не хотите null
,
ServiceStack имеет API для преобразования типов в объектный словарь и регидратации типов из словарей, чтобы вы могли сделать что-то вроде:
var map = requestDto.ToObjectDictionary();
ProtectedNames.ForEach(x => map.Remove(x));
Затем вы можете либо сериализовать остальные свойства в map
или преобразовать его обратно в запрос DTO без удаленных свойств:
var safeDto = map.FromObjectDictionary(requestDto.GetType());