如何拦截CXF Web服务日志记录?

时间:2013-11-26 10:13:17

标签: java web-services soap cxf

如何拦截CXF日志记录以在日志记录期间划掉一些数字(基本上是银行+信用卡信息)。

我将以下内容用于log4j自动日志记录:

    Client client = ClientProxy.getClient(port);
    client.getInInterceptors().add(new LoggingInInterceptor());
    client.getOutInterceptors().add(new LoggingOutInterceptor());

我需要更改哪些内容才能调整soap xml请求并在记录之前删除一些值?

2 个答案:

答案 0 :(得分:2)

您可以使用自定义日志拦截器来执行此操作,您可以在其中处理邮件。

public class CustLogInInterceptor extends AbstractSoapInterceptor {


    public CustLogInInterceptor() {
        super(Phase.RECEIVE);
    }

    @Override
    public void handleMessage(SoapMessage message) throws Fault {

        HttpServletRequest httpRequest = (HttpServletRequest) message.get ( AbstractHTTPDestination.HTTP_REQUEST );
        LoggerUtil.setLog(CustLogInInterceptor.class , LogConstants.DEBUG, "Request From the address : " + httpRequest.getRemoteAddr ( ) );

        try
        {
            //Handle you custom code add log it
              LoggerUtil.setLog(CustLogInInterceptor.class , LogConstants.DEBUG, "Log here" );
        }

        catch ( Exception ex )
        {
            ex.printStackTrace ( );
        }



    }

}

您的CXF配置如下所示

<jaxws:endpoint>

    <jaxws:inInterceptors>
           <ref bean="custInterceptor"/>
        </jaxws:inInterceptors>

</jaxws:endpoint>

<bean id="custInterceptor" class="com.kp.CustLogInInterceptor">

答案 1 :(得分:2)

CXF日志记录拦截器有一个方法:

protected String transform(String originalLogString) {
    return originalLogString;
} 

可以覆盖以进行任何类型的混淆或其他可能需要的东西。只需创建子类并覆盖该方法。