2013-11-26 76 views
1

如何在日誌記錄過程中攔截CXF日誌記錄以清除一些數字(基本上是銀行+信用卡信息)。如何攔截CXF web服務日誌記錄?

我使用log4j的自動記錄如下:

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

我將不得不改變,以便能適應SOAP XML請求,並刪除一些值記錄才?

+0

以下是過濾的完整實現:​​https://github.com/greenbird/xml-formatter-components/tree/master/cxf – ThomasRS

回答

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"> 
2

的CXF日誌記錄攔截器有一個方法:

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

可重寫做任何形式的混淆或某事其他可能需要的。只需創建子類並重寫該方法即可。