【问题标题】:Apache CFX Custom LoggingInInterceptor is not overridingApache CXF 自定义 LoggingInInterceptor 没有覆盖
【发布时间】:2017-11-22 16:51:23
【问题描述】:

我正在尝试创建自定义 LoggingInInterceptor ,但代码根本没有进入自定义部分。我的示例 SOP @@@@@@@@handleMessage 甚至没有打印出来。我正在使用 Apache CFX 和 SpringBoot 应用程序来使用 SOAP services.所以尝试自定义记录器的请求和响应。请帮助找到问题。

自定义拦截器:

@Component
public class CustomLoggingInterceptor extends LoggingInInterceptor{     

    @Override
    public void handleMessage(Message message) throws Fault {
        System.out.println("@@@@@@@@handleMessage"+this.getClass().getName());
        Logger logger = getCustomMessageLogger(message);
        if (logger != null && (writer != null || logger.isLoggable(Level.INFO))) {
            logging(logger, message);
        }
    }

        Logger getCustomMessageLogger(Message message) {
        if (isLoggingDisabledNow(message)) {
            return null; 
        }
        Endpoint ep = message.getExchange().getEndpoint();
        if (ep == null || ep.getEndpointInfo() == null) {
            return getLogger();
        }
        EndpointInfo endpoint = ep.getEndpointInfo();
        if (endpoint.getService() == null) {
            return getLogger();
        }
        Logger logger = endpoint.getProperty("MessageLogger", Logger.class);
        if (logger == null) {
            String logName = "org.apache.cxf.services." ;
            logger = LogUtils.getL7dLogger(this.getClass(), null, logName);
            endpoint.setProperty("MessageLogger", logger);
        }
        return logger;
    }
}

服务电话:-

    UserService service = getUserServiceForEndpoint("URL");
    Client client = ClientProxy.getClient(service);
    Endpoint endpoint = client.getEndpoint();

    endpoint.getOutInterceptors().add(wssOutInterceptor);
    endpoint.getOutInterceptors().add(loggingOutInterceptor);
    endpoint.getOutFaultInterceptors().add(loggingOutInterceptor);

    endpoint.getInInterceptors().add(customLoggingInterceptor );
    endpoint.getInFaultInterceptors().add(customLoggingInterceptor);

【问题讨论】:

    标签: java apache logging spring-boot


    【解决方案1】:

    通过自定义 LoggingOutInterceptor 我的问题如下解决,

    @Component
    public class CredentialMaskingLoggingOutInterceptor extends LoggingOutInterceptor{
    
        @Autowired
        ApplicationProperties appProps;
    
        /**
         * To mask user credentials from the logging so that which will not be misused.
         */
        @Override
        protected String formatLoggingMessage(LoggingMessage buffer) {
            return buffer.toString().replace(appProps.getUsername(), "SOAP_USERNAME").replace(appProps.getPassword(), "SOAP_PASSWORD");
        }
    }
    

    更新日志 sn-p:

    <wsse:UsernameToken wsu:Id="UsernameToken"><wsse:Username>SOAP_USERNAME</wsse:Username><wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">SOAP_PASSWORD</wsse:Password></wsse:UsernameToken>
    

    【讨论】:

      猜你喜欢
      • 2019-07-26
      • 1970-01-01
      • 1970-01-01
      • 2020-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-11
      • 1970-01-01
      相关资源
      最近更新 更多