有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Apache CFX自定义LogginInterceptor未被重写

我正在尝试创建自定义LogginInterceptor,但代码根本不会出现在自定义部分中。我的样本SOP@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@。我正在使用ApacheCfx和SpringBoot应用程序来使用SOAP服务。因此,尝试为记录器定制请求和响应。请帮助查找问题

自定义拦截器:

@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);

共 (1) 个答案

  1. # 1 楼答案

    通过定制LoggingOutinerCeptor,我的问题解决如下:

    @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");
        }
    }
    

    更新的日志片段:

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