`

cxf配置方式实现日志和https请求

阅读更多
这篇博客介绍一下怎么通过配置方式配置https和cxf的日志功能

这部分用编码方式也是可以实现的,但是就存在代码重复的问题,用配置方式会比较好

1、打开日志功能

用编码方式,打开日志功能是这样的:
<jaxws:client id="client" serviceClass="xxx.xxx.xxx" address="${webservice_address}" />

WebserviceInterface client = (WebserviceInterface)ApplicationContext.getBean("client");
		Client proxy = ClientProxy.getClient(client);
		proxy.getInInterceptors().add(new LoggingInInterceptor());
		proxy.getOutInterceptors().add(new LoggingOutInterceptor());

可以用配置文件的方式来做:
<jaxws:client id="client" serviceClass="xxx.xxx.xxx" address="${webservice_address}">
		<jaxws:outInterceptors>
			<bean class="org.apache.cxf.interceptor.LoggingOutInterceptor" />
		</jaxws:outInterceptors>
		<jaxws:inInterceptors>
			<bean class="org.apache.cxf.interceptor.LoggingInInterceptor" />
		</jaxws:inInterceptors>
	</jaxws:client>


这样就可以把web service请求和响应的日志打出来了

形如:

信息: Outbound Message
---------------------------
ID: 1
Address: https://www.remedy-dummy.com:443/remedy/webservice/RemedySA
Encoding: UTF-8
Content-Type: text/xml
Headers: {SOAPAction=["http://cz.o2.com/systems/integrationinfrastructure/CIP-B2B/CIP-B2B_ServiceAssuranceWorkForceClientManagement/1.0/acknowledge"], Accept=[*/*]}
Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns2:AcknowledgeRequest xmlns="http://cz.o2.com/cip/svc/IntegrationMessage-2.0" xmlns:ns2="http://cz.o2.com/systems/integrationinfrastructure/CIP-B2B/CIP-B2B_ServiceAssuranceWorkForceClientManagement/1.0"><ns2:requestBody><ns2:messageType>wolegequ</ns2:messageType><ns2:correlationId>0</ns2:correlationId></ns2:requestBody></ns2:AcknowledgeRequest></soap:Body></soap:Envelope>
--------------------------------------

上面的Outbound Message,是发出去的消息,对于客户端来说,是发出去的请求;对于服务端来说,是发出去的响应

信息: Inbound Message
----------------------------
ID: 1
Encoding: UTF-8
Content-Type: text/xml;charset=UTF-8
Headers: {content-type=[text/xml;charset=UTF-8], Date=[Fri, 20 Apr 2012 15:25:11 GMT], Content-Length=[478], X-Powered-By=[Servlet 2.4; JBoss-4.2.3.GA (build: SVNTag=JBoss_4_2_3_GA date=200807181417)/JBossWeb-2.0], Server=[Apache-Coyote/1.1]}
Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns2:AcknowledgeResponse xmlns="http://cz.o2.com/cip/svc/IntegrationMessage-2.0" xmlns:ns2="http://cz.o2.com/systems/integrationinfrastructure/CIP-B2B/CIP-B2B_ServiceAssuranceWorkForceClientManagement/1.0"><ns2:responseBody><ns2:status>true</ns2:status><ns2:errorDescription>call acknowledge() success</ns2:errorDescription></ns2:responseBody></ns2:AcknowledgeResponse></soap:Body></soap:Envelope>
--------------------------------------

上面的Inbound Message,是收到的消息,对于客户端来说,是收到的响应;对于服务端来说,是收到的请求

ID是成对出现的,一个请求必有一个响应
Address只有请求的Outbound才有,表示发送的地址,也就是web service的endpoint
Headers是http请求头或响应头
Payload是日志的关键,其中就是soap正文的内容

2、发送https请求

用编码方式也可以实现:
WebserviceInterface client = (WebserviceInterface) ApplicationContext
				.getBean("client");
		Client proxy = ClientProxy.getClient(client);

		HTTPConduit conduit = (HTTPConduit) proxy.getConduit();

		TLSClientParameters tlsParams = conduit.getTlsClientParameters();
		tlsParams.setKeyManagers();
		tlsParams.setTrustManagers();
		tlsParams.setDisableCNCheck(true);
		tlsParams.setSecureSocketProtocol("SSL");
		
		conduit.setTlsClientParameters(tlsParams);

同样可以通过配置文件的方式来做:
<http:conduit name="*.http-conduit">

		<http:tlsClientParameters disableCNCheck="true"
			secureSocketProtocol="SSL">

			<!-- 对方的证书 -->
			<sec:trustManagers>
				<sec:keyStore type="JKS" password="changeit"
					file="trust.keystore" />
			</sec:trustManagers>

			<!-- 己方的证书 -->
			<sec:keyManagers keyPassword="changeit">
				<sec:keyStore type="JKS" password="changeit"
					file="self.keystore" />
			</sec:keyManagers>

			<sec:cipherSuitesFilter>
				<sec:include>.*_EXPORT_.*</sec:include>
				<sec:include>.*_EXPORT1024_.*</sec:include>
				<sec:include>.*_WITH_DES_.*</sec:include>
				<sec:include>.*_WITH_NULL_.*</sec:include>
				<sec:exclude>.*_DH_anon_.*</sec:exclude>
			</sec:cipherSuitesFilter>

		</http:tlsClientParameters>

	</http:conduit>

用配置文件的方式,可以节省很多重复代码

关于https和证书的问题,在另外一篇博客里介绍
分享到:
评论

相关推荐

    CXF打印SOAP报文,记录WebService日志

    在实际开发过程中,对于WebService的请求和响应信息进行日志记录是非常必要的。这有助于我们在出现问题时能够快速定位问题原因,并且对服务的整体性能监控也有很大帮助。CXF提供了丰富的API来实现这一功能。 #### ...

    cxf实例的java类和配置文件

    CXF提供了两种主要的方式来实现Web服务:JAX-WS(Java API for XML Web Services)和JAX-RS(Java API for RESTful Web Services)。JAX-WS用于创建SOAP服务,而JAX-RS则用于构建RESTful服务。在我们的例子中,可能...

    SpringBoot WebService cxf接口发布以及logbok日志集成

    在IT行业中,SpringBoot、WebService和cxf是三个非常重要的技术组件,它们分别代表了现代Java应用程序开发的基础、服务间通信的重要方式以及一种强大的服务框架。在这个主题中,我们将深入探讨如何在SpringBoot项目...

    cxf webservice restful实现

    整合两者,我们可以利用Spring配置来创建和管理CXF服务,使服务的生命周期与Spring容器同步,这样便于测试和维护。 1. **服务端实现**: - 创建服务接口:首先定义RESTful服务的Java接口,通常这些接口会使用JAX-...

    spring CXF集成,实现webservice(包含https)

    在IT行业中,Spring框架和Apache CXF是两个非常重要的组件,它们在企业级应用开发中扮演着关键角色。...在实际开发中,还需要注意日志配置、异常处理、性能优化等多方面的问题,以确保服务的稳定性和效率。

    Cxf客户端及服务器端,实现客户端和服务器端的权限验证

    我们将重点讨论基本认证和WS-Security这两种常见的实现方式。 1. **基本认证**: 基本认证是最简单的HTTP身份验证形式,它涉及将用户名和密码编码为Base64字符串并在HTTP请求头中传递。在CXF中,可以通过配置...

    cxf框架实现webservice调用demo

    - 创建服务端点:使用CXF的`JAXWSServerFactoryBean`或`JAXRSServerFactoryBean`创建服务端点,配置服务地址和服务实现类。 - 启动服务:运行服务端点,使服务对外可用。 3. **调用Web服务**: 调用CXF发布的Web...

    CXF实现WebService详解实例

    可以通过Spring的依赖注入(DI)来管理和控制服务实例,也可以利用Spring的AOP(面向切面编程)实现事务、日志等功能。 **六、CXF的RESTful服务** CXF不仅支持SOAP服务,也支持RESTful服务。通过JAX-RS注解,可以...

    CXF方式开发和部署webservice应用

    CXF支持多种编程模型,如JAX-WS和JAX-RS,这使得开发者可以方便地选择适合他们的服务实现方式。 ### 2. JAX-WS与JAX-RS - **JAX-WS**: Java API for XML Web Services,用于创建符合SOAP标准的Web服务。开发者可以...

    CXF实现webservice

    CXF支持基于JAX-WS的标准API来创建SOAP服务,开发者可以使用注解或者XML配置文件定义服务接口和服务实现。 #### 2.2 RESTful Web服务 REST是一种轻量级的架构风格,常用于构建Web API。CXF提供JAX-RS(Java API for...

    spring与cxf集成配置小实例

    本实例将介绍如何将Spring与CXF集成,以实现Webservice的发布和调用,并涉及拦截器的配置。 首先,我们来看`spring与cxf集成配置小实例`的服务器端配置。在`cxf_test_spring_server.zip`中,你将会找到服务器端的...

    CXF和spring整合所需jar包

    在整合过程中,通常会创建一个Spring配置文件,用于声明CXF的服务器端点、服务实现和数据绑定。然后,Spring会根据配置加载并管理这些组件。这样,我们就可以利用Spring的强大功能,如事务管理、安全控制等,同时...

    Apache CXF2+Spring2.5轻松实现WebService

    接下来,我们需要创建服务接口和实现。服务接口通常会遵循SOAP或RESTful约定,如下所示: ```java import javax.jws.WebService; @WebService public interface MyWebService { String doSomething(String input)...

    cxf使用中编码问题

    总之,处理CXF中的编码问题需要对字符编码有深入的理解,并且熟悉CXF框架的配置和API。通过正确配置和使用各种工具,可以有效地避免和解决编码相关的问题,确保服务的正常运行和数据的准确传递。

    WebService开发客户端 cxf方式

    3. **拦截器和插件**:CXF允许自定义拦截器和插件,扩展服务行为,如添加日志、性能监控、错误处理等功能。 4. **RESTful支持**:除了SOAP,CXF也支持RESTful风格的服务,通过JAX-RS(Java API for RESTful Web ...

    Spring+cxf请求webService

    同时,通过CXF的日志配置,可以查看详细的请求和响应XML,帮助定位问题。 6. **优化与性能** 对于大规模使用的情况,可以考虑使用CXF的缓存机制,减少重复的WSDL解析和Java类生成。此外,还可以通过调整线程池...

    cxf的jar包

    6. **调试工具**:CXF提供了强大的调试工具,如SOAP消息追踪和日志记录,帮助开发者调试和优化服务。 7. **国际化支持**:CXF支持多语言环境,能够处理不同地区的字符编码问题。 8. **插件体系**:CXF拥有丰富的...

    apache-cxf3.1.15和3.2.3合集及jdk说明

    4. **创建服务**:定义你的服务接口和实现。CXF提供了多种方式来创建服务,如JAX-WS(Java API for XML Web Services)或JAX-RS(Java API for RESTful Web Services)。 5. **配置CXF**:在应用的配置文件(如...

    CXF

    对于调试,CXF提供了强大的SOAP消息追踪和日志记录功能,帮助开发者排查问题。 **RESTful服务** 除了传统的SOAP服务,CXF也支持RESTful风格的服务。使用CXF,开发者可以轻松地创建符合REST原则的HTTP服务,支持JSON...

    cxf教程(word)

    4. **服务创建**:掌握使用CXF的注解(如`@WebService`、`@WebMethod`等)来定义服务接口和实现。 5. **客户端生成**:学习如何使用CXF的工具自动生成客户端代码,以便于调用服务。 6. **安全与认证**:了解CXF...

Global site tag (gtag.js) - Google Analytics