apache cxf LoggingFeature Mask敏感信息

时间:2018-12-14 07:34:04

标签: java logging cxf

我正在使用Logging功能在Spring启动时将消息登录/注销到我的cxf rest服务器。类似地,使用该命令记录由cxf WebClient发起的外部Rest API连接。

我遇到了一些我不想登录到日志文件的参数。对于我来说,完全删除它们或掩盖它们就足够了。

我在互联网上发现以前的(现在已贬值的)LoginIntercepter进行了转换操作以修改日志条目。我找不到掩盖/截断LogiringFeature日志条目的解决方案。

任何帮助将不胜感激

服务器的日志记录功能的当前配置如下。

factory.setProviders(providers);
LoggingFeature loggingFeature = new LoggingFeature();
loggingFeature.setPrettyLogging(true);
loggingFeature.setLogBinary(false);
loggingFeature.setLogMultipart(false);
factory.getFeatures().add(loggingFeature);
Server server = factory.create();

Web客户端配置如下

 LoggingFeature loggingFeature = new LoggingFeature();
loggingFeature.setPrettyLogging(true);
WebClient client = WebClient.create(url, Collections.singletonList(new JacksonJsonProvider()),
    Arrays.asList(loggingFeature), null);

1 个答案:

答案 0 :(得分:0)

要更改日志消息,您可以...

  

编写自定义LogSender并将其设置在LoggingFeature上以进行自定义   记录。可以从LogEvent类访问所有元数据。

(来源:http://cxf.apache.org/docs/message-logging.html

使用类似以下的发件人

// ...
import org.apache.cxf.ext.logging.event.LogEvent;

class MyLogEventSender implements org.apache.cxf.ext.logging.event.LogEventSender {

    @Override
    public void send(LogEvent event) {
       event.setPayload(maskSensibleParameters(event.getPayload()));
    }

    private String maskSensibleParameters(String pIn) {
       // here goes the tricky part 
       // ... but no details on this in your question 
       // ... here you can stick to "old" LogInterceptor examples
       // ... and also to PrettyLoggingFilter.
    }
}

(默认)PrettyLoggingFilter给出了一个代码示例。

要(完全)屏蔽(隐藏)起来更容易,并保证更高的性能,它取决于使用的“日志记录框架”(java.util,log4j或slf4j),并通过相应的“记录器配置”来实现。