2015-07-06 7 views
0

У меня есть сценарий, в котором я отправляю конфиденциальные данные в ResponseBody контроллера пружины. Spring регистрирует весь орган ответа в режиме DEBUG, где я также вижу чувствительные данные. Теперь, если я настрою свое приложение на печать только журналов INFO или выше, это не будет отображаться, но это не метод доказательства с дураком, так как его возможный способ DEBUG может быть включен случайно.Отладочный журнал ResponseBody по Springframework

В любом случае я могу отключить определенные поля в корпусе ответа от регистрации в Spring?

Благодаря

+1

Я думаю, что вы не можете контролировать уровень каротажа весны в ответном теле. Если вы хотите, чтобы определенные поля были отключены во время ведения журнала, просто включите журнал INFO или выше, как вы предлагаете, а затем в журнале контроллера только информацию, которая вам нужна без конфиденциальных данных. –

+0

Вы должны иметь возможность отключать ведение журнала для определенного класса, который вас беспокоит. Просто добавьте новый регистратор с тем же именем, что и полное имя класса, и установите уровень журнала для журнала на 'OFF'. Затем, даже если уровень журнала для остальной части приложения будет изменен на «DEBUG», соответствующий класс никогда не будет печатать какие-либо сообщения в журналах. Мы сделали это для журналов Atomikos и Freemarker в нашем приложении. – manish

ответ

1

Мое предложение было бы, что вы реализуете пользовательский конвертер для Logback (если это ваша библиотека каротажа) http://logback.qos.ch/manual/layouts.html#customConversionSpecifier

Это позволяет конвертировать ваши записи данных и размыть любые данные, которые должны удаляться из сообщения. Из документации это довольно прямо вперед

public class MySampleConverter extends ClassicConverter { 

    long start = System.nanoTime(); 

    @Override 
    public String convert(ILoggingEvent event) { 
    long nowInNanos = System.nanoTime(); 
    return Long.toString(nowInNanos-start); 
    } 
} 

И конфиг

<configuration> 

    <conversionRule conversionWord="nanos" 
        converterClass="chapters.layouts.MySampleConverter" /> 

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
    <encoder> 
     <pattern>%-6nanos [%thread] - %msg%n</pattern> 
    </encoder> 
    </appender> 

    <root level="DEBUG"> 
    <appender-ref ref="STDOUT" /> 
    </root> 
</configuration> 

Если вы используете Log4j вы можете реализовать собственный фильтр, который будет маскировать данные в макете http://vozis.blogspot.sg/2012/02/log4j-filter-to-mask-payment-card.html

Редактировать Последнее решение проще было переопределить toString возвращаемого объекта. Spring использует toString для регистрации обратного сообщения

+0

Благодарим вас за ответ. Я использую Log4j как мою систему ведения журнала. Я попробую реализовать фильтр Log4j. Могу ли я маскировать данные для определенного поля, а не проверять сами данные? Например, если имя поля класса является паролем, мне придется замаскировать данные. – ConfusionPrevails

+0

Как вы регистрируете журнал ответов? Используете ли вы фильтр или встроены в приложение Spring logging? – tobad357

+0

Я не явным образом регистрирую тело ответа, поэтому он должен быть встроенным в приложении Spring logging. – ConfusionPrevails

Смежные вопросы