防止 Apache CXF 在日志中转储 PDF 内容
Prevent Apache CXF from dumping PDF contents in logs
我正在使用 Apache CXF 库,版本 2.7.7。我的问题是默认的日志记录功能会转储 PDF 文件的原始内容。我希望将 PDF 内容记录为“--- 二进制内容 ---”,就像其他二进制内容一样。
我已通过将这些行添加到我的 Spring 上下文来配置 CXF 日志记录。
<cxf:bus>
<cxf:features>
<cxf:logging/>
</cxf:features>
</cxf:bus>
当我的服务输出 PDF 文件时,我将 Content-Type 设置为 application/pdf
。
问题似乎来自 org.apache.cxf.interceptor.AbstractLoggingInterceptor
,它定义了一个名为 BINARY_CONTENT_MEDIA_TYPES 的列表,该列表不认为 application/pdf
是二进制 MIME 类型。
我有类似的问题,但以尴尬的方式实现。
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(" <content skipped>\n");
builder.append(StringUtils.repeat('-', 25));
}
return builder.toString();
}
}
cxf 配置
<cxf:bus>
<cxf:inInterceptors>
<ref bean="inInterceptor" />
</cxf:inInterceptors>
<cxf:outInterceptors>
<ref bean="outInterceptor" />
</cxf:outInterceptors>
<cxf:outFaultInterceptors>
<ref bean="outInterceptor" />
</cxf:outFaultInterceptors>
<cxf:inFaultInterceptors>
<ref bean="inInterceptor" />
</cxf:inFaultInterceptors>
</cxf:bus>
<bean id="inInterceptor" class="org.apache.cxf.interceptor.LoggingInInterceptor" />
<bean id="outInterceptor" class="com.kp.KPLogOutInterceptor"></bean>
我正在使用 Apache CXF 库,版本 2.7.7。我的问题是默认的日志记录功能会转储 PDF 文件的原始内容。我希望将 PDF 内容记录为“--- 二进制内容 ---”,就像其他二进制内容一样。
我已通过将这些行添加到我的 Spring 上下文来配置 CXF 日志记录。
<cxf:bus>
<cxf:features>
<cxf:logging/>
</cxf:features>
</cxf:bus>
当我的服务输出 PDF 文件时,我将 Content-Type 设置为 application/pdf
。
问题似乎来自 org.apache.cxf.interceptor.AbstractLoggingInterceptor
,它定义了一个名为 BINARY_CONTENT_MEDIA_TYPES 的列表,该列表不认为 application/pdf
是二进制 MIME 类型。
我有类似的问题,但以尴尬的方式实现。
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(" <content skipped>\n");
builder.append(StringUtils.repeat('-', 25));
}
return builder.toString();
}
}
cxf 配置
<cxf:bus>
<cxf:inInterceptors>
<ref bean="inInterceptor" />
</cxf:inInterceptors>
<cxf:outInterceptors>
<ref bean="outInterceptor" />
</cxf:outInterceptors>
<cxf:outFaultInterceptors>
<ref bean="outInterceptor" />
</cxf:outFaultInterceptors>
<cxf:inFaultInterceptors>
<ref bean="inInterceptor" />
</cxf:inFaultInterceptors>
</cxf:bus>
<bean id="inInterceptor" class="org.apache.cxf.interceptor.LoggingInInterceptor" />
<bean id="outInterceptor" class="com.kp.KPLogOutInterceptor"></bean>