`
mingnianshimanian
  • 浏览: 40407 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

cxf+web service(二)代理工厂,安全验证,数据绑定

阅读更多

(二)代理工厂,安全验证,数据绑定

 

代理工厂

1.服务端:ServerFactoryBean,JaxWsServerFactoryBean 用于服务端调用.前者针对POJO,后者针对JAX-WS,他们用于生成服务端的EndPoint,暴露出服务接口

2.客户端:ClientProxyFactoryBean,JaxWsProxyFactoryBean 用于客户端调用.前者针对POJO,后者针对JAX-WS,他用于在客户端生成Web Service的代理proxy

3.除了这些Factory,CXF客户端还有ClientFactoryBean,JaxWsClientFactoryBean,这两个Factory生成的不是Web Service的代理,而是一个Endpoint,提供一些更该机的功能.

 

安全验证

Apache WSS4J(WebService Security For Java) 实现了java语言的 WS-Security.WSS4J依赖于SAAJ.CXF中使用拦截器机制完成WSS4J功能的支持.只需要初始化WSS4JInInterceptor(对应还有一个WSS4JOutInterceptor)实例并添加相关信息即可.CXF2.1.x之后的版本可以完成SAAJInInterceptor(对应的一个SAAJOutInterceptor)拦截器的自动注册,否则需要再注册一下SAAJ拦截器.

1.在spring.xml中配置WSS4J输入拦截器

 

<bean id="wss4jInInterceptor" class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor">
   <map>
      <entry key="xx" value="xx"/>
   </map>
</bean>

在接口服务里面加入关系

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

下面是服务器端具体密码回调处理类,它负责接收并处理客户端提交的用户名和密码,这个方法没有返回值,显示,如果验证失败,抛出异常表示.

import java.io.IOException;
import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.UnsupportedCallbackException;
import org.apache.ws.security.WSConstants;
import org.apache.ws.security.WSPasswordCallback;
import org.apache.ws.security.WSSecurityException;

public class ServerPasswordCallbackHandler implements CallbackHandler {

	public final static String USER = "liu";
	public final static String PASSWORD = "lius";//设置用户名密码
	public void handle(Callback[] callbacks) throws IOException,
			UnsupportedCallbackException {
		WSPasswordCallback wspassCallback = (WSPasswordCallback) callbacks[0];
		System.out.println(wspassCallback.getIdentifier() + "\t"
				+ wspassCallback.getPassword());
		
		if(WSConstants.PASSWORD_TEXT.equals(wspassCallback.getPasswordType())){
			if (wspassCallback.getIdentifier().equals(USER)
					&& wspassCallback.getPassword().equals(PASSWORD)) {
				System.out.println(".................验证通过!");   
				System.out.println(".................identifier = " + USER);   
				System.out.println(".................password = " + PASSWORD); 
			} else {
				throw new WSSecurityException("............未通过验证!");
			}
		} else {
			//密码使用MD5密文发送
			System.out.println(wspassCallback.getIdentifier()); 
			wspassCallback.setPassword(PASSWORD);
		}
	}
}

2.客户端实现:在spring.xml中配置WSS4J输出拦截器

<bean id="wss4jOutInterceptor" class="org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor">
   <map>
      <entry key="xx" value="xx"/>
   </map>
</bean>

在服务接口里加入关系

<jaxws:outInterceptors>
	<ref bean="wss4jOutInterceptor" />
</jaxws:outInterceptors

这里使用了WSS4J输出拦截器,因为要将用户名和密码输出到服务器进行验证处理.另外与服务端不同的是多了一个user参数初始化WSS4J的输出拦截器,用于初始化用户名,这是一个必选,稍后将在下面的客户端密码回调处理类进行重新设定值

import java.io.IOException;
import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.UnsupportedCallbackException;
import org.apache.ws.security.WSPasswordCallback;

public class ClientPasswordCallbackHandler implements CallbackHandler{
	public final static String USER = "liu";
	public final static String PASSWORD = "lius";//设置用户名密码
	public void handle(Callback[] callbacks) throws IOException,
			UnsupportedCallbackException {
		WSPasswordCallback wspassCallback = (WSPasswordCallback)callbacks[0];
		wspassCallback.setIdentifier(USER);
		wspassCallback.setPassword(PASSWORD);
	}
}

然后我们访问这个web服务,从控制台查看日志,可以看到在SOAP信封的Header中包装了<wsse:Security...等元素,元素包括了WS-Security 的一些信息和设置的用户名和密码.如果使用MD5加密,则密码显示为null,只能显示用户名.如果客户端和服务端的用户名或者密码不对应,则登陆不上,会显示"...为通过验证!".

 

数据绑定

 

1.JAXB绑定.JAXB是一套自动映射XML和JAVA 实例的开发接口和工具.如果Web Service发布的接口的参数类型时类,而且返回的类型是List,String等,这样发布的Web Service 与普通的java没区别,因为JAXB都支持.但是JAXB不能将一些java类型自然映射到XML表现形式,例如HashMap,或其他非JavaBean之类,例如接口,Map,这样就要定义一个适配器,使java类型自动适应.一般可以编写一个类继承XmlAdapter,以实现此抽象类的适配器,另外可以安装使用注释XmlJavaTypeAdapter的适配器

 

2.Aegis Databingding.Aegis是一个快速,基于STAX的数据绑定,他能使采用代码优先方式发布Web Service的情况更简单.Aegis支持接口,集合类,MAP和各种数据类型.也不需要注释,也不需要写适配器

 

0
1
分享到:
评论

相关推荐

    cxf+spring实现webservice

    在IT行业中,开发Web服务是常见的需求,而CXF和Spring框架的结合为开发者提供了一种高效、灵活的方式来实现Web Service。本篇将深入探讨如何利用CXF和Spring来创建、部署和消费Web Service。 CXF,全称CXF Commons ...

    CXF+Tomat发布WebService

    - 考虑安全性,对Web服务进行身份验证和授权。 总结,【CXF+Tomcat发布WebService】是一种灵活且高效的方法,尤其适用于不需要Spring的环境。通过理解CXF的核心功能和Tomcat的基本操作,开发者可以创建和部署自己的...

    cxf+ws-security-JAR

    综上所述,"cxf+ws-security-JAR"是针对Web服务安全调用的解决方案,通过Apache CXF和WS-Security标准,为Web服务提供了强大的安全保障,确保了敏感数据的传输安全和用户身份的有效验证。这个JAR包很可能包含了一些...

    CXF + Spring 3.0的学习例子

    1. **Apache CXF**:CXF是一个开放源代码的Web服务框架,支持多种协议和绑定,如SOAP、RESTful HTTP、JMS等。它提供了一种简单的方式来创建和消费Web服务,包括WSDL-first(基于WSDL的开发)和Java-first(基于Java...

    cxf+spring3.1整合demo

    这些类通常会被CXF用来生成WSDL(Web Service Description Language)文档,供客户端调用。 4. **发布服务**:使用Spring的`jaxws:endpoint`标签或者`@WebService`注解,将服务绑定到CXF Bus上,这样服务就会被发布...

    实战Web Service —— 使用Apache CXF开发Web服务的教程

    **实战Web Service —— 使用Apache CXF开发Web服务的教程** Apache CXF是一个开源的Java框架,用于构建和部署Web服务。本教程将带你深入理解如何利用CXF来开发高效、灵活的Web服务。我们将从基础概念开始,逐步...

    web service cxf获取第三方天气数据

    Web服务是一种通过网络进行通信的方式,它允许不同的应用程序之间交换数据。CXF是Apache组织提供的一款开源框架,专门用于构建和开发Web服务。本项目主要讲述了如何使用CXF框架来获取第三方天气数据。 首先,我们...

    使用cxf的webservice安全验证

    在IT行业中,Web服务安全验证是确保数据传输过程中的安全性和隐私性的重要环节。CXF是一个流行的开源Java框架,用于创建和消费Web服务。本文将深入探讨如何在使用CXF时实现Web服务的安全验证。 首先,理解CXF的背景...

    Apache CXF Web Service Development.pdf

    - **数据绑定**:CXF提供了多种数据绑定选项,包括使用JAXB进行XML绑定,以及使用JAX-RS进行JSON绑定。这些技术帮助开发者将Java对象转换为可传输的数据格式,并反向操作。 - **安全性和认证**:Web服务的安全性至...

    基于CXF的webService本地数据交互----PC端与Android端(二)

    在本篇博文中,我们将深入探讨如何利用Apache CXF实现Web Service进行本地数据交互,特别是在PC端和Android端之间的通信。Apache CXF是一个开源框架,它允许开发人员创建和消费各种Web服务,包括SOAP和RESTful风格的...

    PacktPub.Apache.CXF.Web.Service.Development.Dec.2009.rar

    5. **安全特性**:CXF提供了全面的安全特性,包括WS-Security支持,可以实现身份验证、加密、数字签名等功能,保障Web服务的安全通信。 6. **扩展性**:Apache CXF允许开发者通过插件机制添加自定义功能,增强了...

    servicemix代理web service

    【Servicemix代理Web Service】是企业级集成平台Apache Servicemix中的一个重要功能,它允许开发者通过Servicemix来代理和管理外部的Web服务。这种代理方式提供了多种优势,包括服务的路由、转换、监控以及安全性...

    Web service之CXF-helloworld DEMO

    而CXF是一个开源项目,它提供了全面的支持,包括WSDL(Web Services Description Language)到Java以及Java到WSDL的绑定,使得开发Web服务变得简单易行。 接下来,我们将按照以下步骤创建一个CXF的"Hello World...

    Web Service开发指南

    4. **WS-Security**: 提供Web Service的安全性,如数字签名、加密和身份验证。 **最佳实践和挑战** 在Web Service开发中,应关注服务的互操作性、安全性、性能和版本管理。确保服务符合WS-I基本配置,以便跨平台...

    CXF soap例子源码

    7. **数据绑定**:CXF支持多种数据绑定机制,如JAXB(Java Architecture for XML Binding),它将XML数据转换为Java对象,反之亦然。在SOAP请求和响应中,数据通常以XML形式传输,通过JAXB可以方便地处理这些数据。 ...

    webservice cxf.jar 相关包

    Web服务(Web Service)是一种基于网络的、分布式的模块化组件,它提供了标准的方法来使得不同的应用程序能够在Internet上相互通信。在Java世界中,Apache CXF是一个强大的Web服务框架,用于构建和消费Web服务。CXF...

    ssm+shiro+cxf

    SSM+Shiro+CXF是一个综合的Java Web开发框架,结合了Spring、SpringMVC、MyBatis和Apache Shiro四个关键组件,用于构建安全、高效的企业级应用程序。在这个项目中,开发者对原有的版本进行了优化,提升了用户体验和...

    apache-cxf-2.5.2

    Apache CXF 是一个开源的Java框架,用于构建和开发服务导向架构(Service-Oriented Architecture, SOA)和Web服务。这个"apache-cxf-2.5.2"版本是该框架的一个特定发行版,发布于2011年,包含了CXF框架的所有组件和...

    Apache_CXF WebProject

    3. **数据绑定**:CXF使用JAXB(Java Architecture for XML Binding)将XML数据自动映射为Java对象,简化了服务接口的实现和调用。 4. **工具支持**:CXF提供了一套强大的工具,如WSDL(Web Service Description ...

Global site tag (gtag.js) - Google Analytics