我有一个场景,我在弹簧控制器的ResponseBody中发送一些敏感数据。 Spring以DEBUG模式记录整个响应主体,在那里我也可以看到敏感数据。现在,如果我将我的应用程序配置为仅打印INFO日志或更高版本,则不会显示,但这不是一种万无一失的方法,因为可能会意外打开DEBUG模式。
无论如何,我可以禁止响应正文中的某些字段被Spring记录吗?
由于
答案 0 :(得分: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来记录返回消息