xfire和Spring良好的结合,促使我将原有的axis方式改造到xfire方式。下面将整个过程简述一下,首先看一下如何配置xfire。在Web.xml中有两种方式来配置xfire,
一种是通过spring提供的org.springframework.web.servlet.DispatcherServlet来实现,配置方法是这样的:
1、web.xml中配置
<servlet>
<servlet-name>xfire</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>xfire</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
2、WEB-INF下添加xfire-servlet.xml文件,配置方法如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="urlMap">
<map>
<entry key="/EchoService"> <!-- 这里是WebService的名称 -->
<ref bean="echo"/>
</entry>
</map>
</property>
</bean>
<bean id="echo" class="org.codehaus.xfire.spring.remoting.XFireExporter">
<property name="serviceFactory">
<ref bean="xfire.serviceFactory"/>
</property>
<property name="xfire">
<ref bean="xfire"/>
</property>
<property name="serviceBean">
<ref bean="echoBean"/>
</property>
<property name="serviceClass">
<value>xxx.com.webservice.Echo</value>
</property>
</bean>
</beans>
配置完成后,定义一个接口,然后启动Server,通过client可实现WebService的访问。
同时,xfire提供了另外一种阅读性更好,更符合spring配置习惯的配置方法,配置方法如下:
1、web.xml
<servlet>
<servlet-name>XFireServlet</servlet-name>
<servlet-class>
org.codehaus.xfire.spring.XFireSpringServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/servlet/XFireServlet/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/service/*</url-pattern>
</servlet-mapping>
这种方式不需要单独配置一个xfire-servlet.xml文件,只需要在spring的applicationContext文件中进行配置就能实现WebService的配置
2、applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- 需要import下面这个xml文件 -->
<import resource="classpath:org/codehaus/xfire/spring/xfire.xml" />
<!-- WebService Impl WebService接口的实现类-->
<bean id="accountWebServiceImpl" class="xxx.com.account.webservice.impl.AccountWebServiceImpl" autowire="byName" />
<!-- end -->
<!-- 下面的配置是WebService的标准配置 -->
<bean id="AccountWebService" class="org.codehaus.xfire.spring.remoting.XFireExporter"> <!-- WebService的名字 -->
<property name="xfire" ref="xfire" />
<property name="serviceBean" ref="accountWebServiceImpl" /> <!-- WebService的实现类bean -->
<property name="serviceClass" value="xxx.com.account.webservice.AccountWebService" />
<property name="inHandlers" ref="authenticationHandler"/> <!--普通的用户名密码的方式进行WebService的验证-->
</bean>
<bean id="authenticationHandler"
class="xxx.com.account.webservice.authentcation.AuthenticationHandler"/>
</beans>
通过上面的配置,就可以将Spring的bean和xfire的WebService很好的结合起来了,以上的方式在WebService上只是做了简单的密码验证,并不能保证WebService的安全性,下面将详细描述如何通过WSS4J的方式来实现WebService的数字证书的加密验证,这里大量的参考了SpringSide,非常感谢!
下面看一下关于WSS4J的spring配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<import resource="classpath:org/codehaus/xfire/spring/xfire.xml" />
<!-- WebService Impl -->
<bean id="accountWebServiceImpl" class="xxx.com.account.webservice.impl.AccountWebServiceImpl" autowire="byName" />
<!-- end -->
<!-- 使用 WSS4J验证 -->
<bean id="accountWebServiceWSS4J" class="org.codehaus.xfire.spring.remoting.XFireExporter">
<property name="serviceBean" ref="accountWebServiceImpl"/>
<property name="serviceClass" value="xxx.com.account.webservice.wss4j.AccountWebServiceWSS4J"/>
<property name="inHandlers">
<list>
<ref bean="domInHandler"/>
<ref bean="wss4jInHandler"/>
<ref bean="validateUserTokenHandler"/>
</list>
</property>
</bean>
<bean id="domInHandler" class="org.codehaus.xfire.util.dom.DOMInHandler"/>
<bean id="wss4jInHandler" class="org.codehaus.xfire.security.wss4j.WSS4JInHandler">
<property name="properties">
<props>
<prop key="action">UserToken</prop>
<prop key="passwordCallbackClass">xxx.com.account.webservice.wss4j.PasswordHandler</prop>
</props>
</property>
</bean>
<!-- 使用 WSS4J验证 Signature模式 -->
<bean id="accountWebServiceWSS4JSign" class="org.codehaus.xfire.spring.remoting.XFireExporter">
<property name="serviceBean" ref="accountWebServiceImpl"/>
<property name="serviceClass" value="xxx.com.account.webservice.wss4j.AccountWebServiceWSS4JSign"/>
<property name="inHandlers">
<list>
<ref bean="domInHandler"/>
<ref bean="wss4jInHandlerSign"/>
<ref bean="validateUserTokenHandler"/>
</list>
</property>
</bean>
<bean id="wss4jInHandlerSign" class="org.codehaus.xfire.security.wss4j.WSS4JInHandler">
<property name="properties">
<props>
<prop key="action">Signature</prop>
<prop key="signaturePropFile">com/real/cn/account/webservice/wss4j/server_security_sign.properties</prop>
<prop key="passwordCallbackClass">xxx.com.account.webservice.wss4j.PasswordHandler</prop>
</props>
</property>
</bean>
<!-- 使用 WSS4J验证 Encrypt模式 -->
<bean id="accountWebServiceWSS4JEnc" class="org.codehaus.xfire.spring.remoting.XFireExporter">
<property name="serviceBean" ref="accountWebServiceImpl"/>
<property name="serviceClass" value="xxx.com.account.webservice.wss4j.AccountWebServiceWSS4JEnc"/>
<property name="inHandlers">
<list>
<ref bean="domInHandler"/>
<ref bean="wss4jInHandlerEnc"/>
<ref bean="validateUserTokenHandler"/>
</list>
</property>
</bean>
<bean id="wss4jInHandlerEnc" class="org.codehaus.xfire.security.wss4j.WSS4JInHandler">
<property name="properties">
<props>
<prop key="action">Encrypt</prop>
<prop key="decryptionPropFile">com/real/cn/account/webservice/wss4j/server_security_enc.properties</prop>
<prop key="passwordCallbackClass">xxx.com.account.webservice.wss4j.PasswordHandler</prop>
</props>
</property>
</bean>
<bean id="validateUserTokenHandler"
class="xxx.com.account.webservice.wss4j.WSS4JTokenHandler"/>
</beans>
Encrypt模式是指客户端使用公钥加密数据流,然后发送到服务端,服务端通过私钥进行校验,这种方式适合集中式的服务;Signature模式是指客户端使用私钥加密数据流,服务端通过公钥来校验,这种方式适合分布式服务。
对于Encrypt模式和Signature模式的接口,只要继承AccountWebService就可以。
server_security_enc.properties和server_security_sign.properties文件保存了证书的位置以及用户名和密码,这里的用户名和密码,这样就有密码和证书两重的校验方式
对于server端和client端来讲
私钥,格式如下:
org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin
org.apache.ws.security.crypto.merlin.keystore.type=jks
org.apache.ws.security.crypto.merlin.keystore.password=xxx
org.apache.ws.security.crypto.merlin.alias.password=xxx
org.apache.ws.security.crypto.merlin.keystore.alias=xxx
org.apache.ws.security.crypto.merlin.file=.../account_server_enc.jks
公钥,格式如下:
org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin
org.apache.ws.security.crypto.merlin.keystore.type=jks
org.apache.ws.security.crypto.merlin.keystore.password=xxx
org.apache.ws.security.crypto.merlin.keystore.alias=xxx
org.apache.ws.security.crypto.merlin.file=.../account_client_enc.jks
分享到:
相关推荐
在本教程中,我们将深入探讨如何使用Spring和XFire编写Web服务的完整配置,并通过实际案例来学习这一过程。 首先,我们需要了解Spring和XFire的基础。Spring框架提供了一个名为Spring-WS的模块,专门用于构建Web...
2. **配置Spring**:在Spring的配置文件(如`applicationContext.xml`)中,定义一个XFire的工厂bean,设置所需的属性,如服务接口、实现类、端点地址等。 3. **定义Web服务**:创建Web服务的Java接口和实现类。...
标题中的“xfire+spring+maven构建webservice服务器和客户端”揭示了本教程将围绕三个主要技术进行讨论:XFire、Spring和Maven。这三者都是Java开发中不可或缺的工具,尤其在构建Web服务方面。 XFire是早期的一个...
【xfire集成spring+hibernate实现webservice样例工程】是一个典型的Java开发中的整合案例,它演示了如何将三个重要的技术框架——XFire、Spring和Hibernate有效地结合在一起,以构建一个提供Web服务的工程。...
"xfire+spring+安全认证"的主题聚焦于如何利用XFire和Spring框架来实现安全的Web服务。XFire是一个用于创建、消费和部署SOAP Web服务的Java库,而Spring框架则是一个广泛使用的全功能应用开发框架,提供了包括安全性...
- **创建配置文件**:在 `WEB-INF` 目录下创建两个 XML 文件,`applicationContext.xml` 用于定义应用中的 Bean,`xfire-servlet.xml` 用于配置 xFire 相关的 Bean。 3. **Web.xml 配置**: - **Spring 配置**:...
webservice中用到的jar,xfire-spring-1.2.6.jar,xfire-spring-1.2.6.jar,xfire-spring-1.2.6.jar,xfire-spring-1.2.6.jar
在Web服务领域,Spring提供了对Web服务的支持,可以与XFire无缝集成,允许开发者在Spring环境下创建、配置和管理Web服务。 结合XFire和Spring,有以下两种主要的方式来开发Web服务: 1. **基于注解的方式**:...
首先,我们需要创建一个Spring配置文件(如`applicationContext.xml`),在这个文件中定义Bean来配置我们的服务实现类和XFire相关的配置。例如,我们可以声明一个服务接口的实现类Bean,然后使用Spring的`...
2. XFire相关的jar文件:如`xfire-core`, `xfire-aegis`, `xfire-annotations`, `xfire-spring`等,它们提供了Web服务的实现和与Spring的集成支持。 在Spring配置中,我们可以通过以下步骤来配置XFire: 1. 引入...
总结来说,"xfire+spring+webservice+client"是一个关于利用Spring和XFire集成实现Web服务客户端的议题,涵盖了从Web服务的基本概念到具体实现的多个层次。通过理解这些知识点,开发者可以有效地构建和维护自己的Web...
【标题】中的“webservice xfire整合spring(webservice配置采用注解)”是指将Xfire,一个早期的Web服务框架,与Spring框架结合使用,其中Web服务的配置通过Spring的注解方式进行。这种方式简化了配置,提高了开发...
### 使用XFire与Spring开发WebService的关键知识点 #### 实现功能与特点 - **基于J2EE平台的...总之,本文档不仅适合初学者学习,也适合有一定经验的开发者深入了解XFire和Spring在WebService领域的强大功能。
例如,使用`@WebService`注解可以在不编写XML配置的情况下声明服务。 ```java @WebService public class HelloWorldImpl implements HelloWorld { // ... } ``` 五、XFire与其他技术的集成 XFire可以很好地与...
- XFire的核心库:如xfire-core、xfire-aegis等,用于处理Web Service相关的协议和序列化。 - Spring框架的库:如spring-context、spring-web等,用于Spring的容器管理和Web支持。 - 数据库驱动:如mysql-connector-...
标题 "xfire 与Spring完整集成实例(WebService)" 提示我们关注的是如何将XFire框架与Spring框架整合,以实现Web服务的功能。XFire是一个早期的Java Web Service框架,它提供了快速、轻量级的方式来创建和消费SOAP...
在这个“webservice xfire spring2.0完整实例”中,我们将会探讨如何结合XFire 1.2.6和Spring 2.0来创建和消费Web服务。首先,我们需要理解Spring 2.0中的Web服务抽象层,即Spring Web Services模块。这个模块提供了...