停止Apache CXF记录MultipartBody附件的二进制数据

我需要阻止CXF在MultipartBody对象中记录附件的二进制数据(由出站消息中的AbstractLoggingInterceptor抛出)。 当我添加我的LoggingInInterceptor ,我将setShowBinaryData设置为false,但这似乎不会阻止多部分消息中的二进制数据被记录。

我不确定是否需要创建自定义loggingInInterceptor,或者是否有一种配置现有拦截器的方法来截断它找到的任何二进制数据。 停止它完全记录MultipartBody响应,或截断数据都是可接受的解决方案。

showBinaryContent默认为false,但二进制数据会根据内容类型进行记录,目前如果您的内容类型不是以下任何一种; 将记录二进制数据。

 static { BINARY_CONTENT_MEDIA_TYPES = new ArrayList(); BINARY_CONTENT_MEDIA_TYPES.add("application/octet-stream"); BINARY_CONTENT_MEDIA_TYPES.add("image/png"); BINARY_CONTENT_MEDIA_TYPES.add("image/jpeg"); BINARY_CONTENT_MEDIA_TYPES.add("image/gif"); } 

假设您的内容类型是application/zip ,您可以创建自定义拦截器并覆盖isBinaryContent,如下所示

 import org.apache.commons.lang3.StringUtils; import org.apache.cxf.interceptor.LoggingOutInterceptor; import org.apache.cxf.interceptor.LoggingMessage; public class KPLogOutInterceptor extends LoggingOutInterceptor { @Override public boolean isBinaryContent(String contentType) { return contentType != null && (BINARY_CONTENT_MEDIA_TYPES.contains(contentType)|| "application/zip".equals(contentType); } } 

不使用内容类型的另一种方法如下所示。

 import org.apache.commons.lang3.StringUtils; import org.apache.cxf.interceptor.LoggingOutInterceptor; import org.apache.cxf.interceptor.LoggingMessage; public class KPLogOutInterceptor extends LoggingOutInterceptor { @Override protected String formatLoggingMessage(LoggingMessage loggingMessage) { return removePayload(loggingMessage.toString()); } private String removePayload(String str){ StringBuilder builder = new StringBuilder(str); if (str.indexOf("Payload:") + 9 > 8) { builder.setLength(builder.indexOf("Payload:") + 8); builder.append(" \n"); builder.append(StringUtils.repeat('-', 25)); } return builder.toString(); } }