防止 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>