`

webservice cxf wss

 
阅读更多

 

webservice是一种规范,好比数据库的定义也是一种规范,基于这种规范诞生了很多的数据库,如:mysql、oracle等,现在市面流行的webservice的实现有很多,但我觉得cxf是比较适合于spring结合使用的。使用cxf向外提供webservice接口,势必会有安全问题,使用ws-security可以很好的解决安全问题。下面我们来看例子(采用maven构建项目):

1、项目目录结构

140105114653

说明:

pom.xml--maven构建项目所用到的jar及其他jetty的配置;

web.xml--配置spring监听器和cxf过滤器;

beans.xml--spring的配置;

cxf-beans.xml--cxf服务器端的配置;

cxfClient-beans.xml--cxf客户端的配置;

log4j.properties--日志文件;

Helloworld--webservice接口的定义;

HelloworldImpl--webservice接口的实现;

ServerPasswordCallback--服务器端安全校验;

ClientPasswordCallback--客户端安全校验;

WebServiceTest--junit单元测试

2、web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_id" version="2.4"
 xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
       <context-param>
           <param-name>contextConfigLocation</param-name>
          <param-value>classpath:beans.xml;classpath:cxf-beans.xml</param-value>
      </context-param>

     <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
     </listener>

     <servlet>
          <description>Apache CXF Endpoint</description>
         <display-name>cxf</display-name>
         <servlet-name>cxf</servlet-name>
         <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
         <load-on-startup>1</load-on-startup>
     </servlet>
     <servlet-mapping>
          <servlet-name>cxf</servlet-name>
          <url-pattern>/ws/*</url-pattern><!-- 拦截所有以ws开头的地址 -->
     </servlet-mapping>

</web-app>

3、接口的定义及实现

(1)、Helloworld

package com.luoshengsha.ws;import javax.jws.WebService;
/**
  * webservice接口
  * @author luoshengsha
  * 时间:2014-1-5 上午10:41:09
  */
 @WebService
 public interface Helloworld {
      public void say(String name);
 }

(2)、HelloworldImpl

package com.luoshengsha.ws.impl;
import com.luoshengsha.ws.Helloworld;
public class HelloworldImpl implements Helloworld {
     public void say(String name) {
          System.out.println("欢迎你,"+name+"!");
     }
}

4、安全校验的定义

(1)、ServerPasswordCallback

package com.luoshengsha.ws;
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 ServerPasswordCallback implements CallbackHandler {
       @Override
        public void handle(Callback[] callbacks) throws IOException,
                                 UnsupportedCallbackException {
              WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];
             if (pc.getIdentifier().equals("luoshengsha")) {//判断来自客户端的用户名是否是指定的用户名
             // set the password on the callback. This will be compared to the
              // password which was sent from the client.
                   pc.setPassword("lss123");//服务器端配置密码,与客户端的密码保持一致
              }
        }
}

(2)、ClientPasswordCallback

package com.luoshengsha.ws;
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 ClientPasswordCallback implements CallbackHandler {
  @Override
  public void handle(Callback[] callbacks) throws IOException,
                UnsupportedCallbackException {
      WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];
      pc.setPassword("lss123");//客户端配置密码
  }
}

5、spring相关配置文件

(1)、beans.xml

<?xml version="1.0" encoding="UTF-8"?>
 <beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:context="http://www.springframework.org/schema/context"
  xmlns:aop="http://www.springframework.org/schema/aop"
  xmlns:tx="http://www.springframework.org/schema/tx"
  xsi:schemaLocation="http://www.springframework.org/schema/beans
  http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
  http://www.springframework.org/schema/context
  http://www.springframework.org/schema/context/spring-context-2.5.xsd
  http://www.springframework.org/schema/aop 
  http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
  http://www.springframework.org/schema/tx 
  http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
 <context:annotation-config />
  <aop:aspectj-autoproxy/>
  <aop:aspectj-autoproxy proxy-target-class="true"/>
 <context:component-scan base-package="com.luoshengsha" />
 </beans>

(2)、cxf-beans.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:jaxws="http://cxf.apache.org/jaxws"
 xsi:schemaLocation="http://www.springframework.org/schema/beans
 http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
 http://cxf.apache.org/jaxws
 http://cxf.apache.org/schemas/jaxws.xsd">
 <import resource="classpath:META-INF/cxf/cxf.xml"/>
 <import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>
 <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />

 <!-- 定义安全校验器 -->
 <bean id="wss4jInInterceptor" class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor">
 <constructor-arg>
 <map>
 <entry key="action" value="UsernameToken"/>
 <entry key="passwordType" value="PasswordText"/>
 <!-- <entry key="signaturePropFile" value="..."/> -->
 <entry key="user" value="luoshengsha"/><!--设置服务器端用户名-->
 <entry key="passwordCallbackClass" value="com.luoshengsha.ws.ServerPasswordCallback"/>
 </map>
 </constructor-arg>
 </bean>
 <!-- helloworld webservice接口 -->
 <jaxws:endpoint id="helloWebservice" implementor="com.luoshengsha.ws.impl.HelloworldImpl" address="/helloworld_ws">
 <jaxws:inInterceptors>
 <ref bean="wss4jInInterceptor"/>
 </jaxws:inInterceptors>
 </jaxws:endpoint>
</beans>

(3)、cxfClient-beans.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:jaxws="http://cxf.apache.org/jaxws"
 xsi:schemaLocation="http://www.springframework.org/schema/beans 
 http://www.springframework.org/schema/beans/spring-beans.xsd
 http://cxf.apache.org/jaxws 
 http://cxf.apache.org/schemas/jaxws.xsd">
<!-- 定义安全校验器 -->
 <bean id="wss4jInInterceptor2" class="org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor">
 <constructor-arg>
 <map>
 <entry key="action" value="UsernameToken"/>
 <entry key="passwordType" value="PasswordText"/>
 <entry key="user" value="luoshengsha"/><!--设置客户端用户名-->
 <entry key="passwordCallbackClass" value="com.luoshengsha.ws.ClientPasswordCallback"/>
 </map>
 </constructor-arg>
 </bean>
 <!-- 邮件客户端webservice -->
 <jaxws:client id="helloworldlClient" serviceClass="com.luoshengsha.ws.Helloworld" address="http://localhost:8080/ws/helloworld_ws" >
 <jaxws:outInterceptors>
 <ref bean="wss4jInInterceptor2"/>
 </jaxws:outInterceptors>
 </jaxws:client>
</beans>

6、单元测试WebServiceTest.java

package com.luoshengsha.test;
import org.junit.BeforeClass;
 import org.junit.Test;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.luoshengsha.ws.Helloworld;
public class WebServiceTest {
    private static Helloworld helloworld;
   @BeforeClass
   public static void setUpBeforeClass() throws Exception {
      try {
          ApplicationContext cxt = new ClassPathXmlApplicationContext(new String[] {"beans.xml","cxfClient-beans.xml"});
          helloworld = (Helloworld)cxt.getBean("helloworldlClient");
     } catch (Exception e) {
        e.printStackTrace();
     }
   }
   @Test
   public void say() {
    helloworld.say("罗生沙");
   }
 }
7、源码下载地址:http://pan.baidu.com/s/1i3qkesH

本文出自 luoshengsha.com,欢迎转载,转载时请注明出处及相应链接。
本文永久链接: http://www.luoshengsha.com/356.html

 

分享到:
评论

相关推荐

    webservice cxf.jar 相关包

    5. 安全性:通过WSS,CXF提供了一套完整的安全解决方案,包括基本认证、数字签名、消息加密等。 6. 传输协议:CXF不仅支持HTTP/S,还可以通过JMS、JBI等多种传输协议。 在实际开发中,使用CXF可以极大地简化Web服务...

    Spring集成CXF实例(包含WSS4J安全认证)

    4. **发布服务**: 使用`@WebService`注解标记服务接口,并通过CXF的`JaxWsServerFactoryBean`在特定端口上发布服务。 **二、WSS4J安全认证** WSS4J(Web Services Security for Java)是Apache的一个项目,它提供...

    webservice+cxf+wss4j+spring

    在本示例中,"webservice+cxf+wss4j+spring"的整合过程可能包括以下步骤: 1. **设置Spring配置**:首先,我们需要在Spring配置文件中定义CXF服务端点和WSS4J的安全策略。这可能涉及到创建bean,如`...

    webservice cxf jar包

    【标题】"Webservice CXF Jar包"是一个用于构建Web服务的开源框架,它整合了Apache CXF项目的核心库。这个包中包含了多个组件和依赖,以支持开发、部署和运行基于SOAP和RESTful风格的Web服务。 【描述】提到的...

    android_ksoap2_cxf_wss4j_authentication

    在提供的文件`wsserver2`和`cxf_webservice_android`中,很可能是服务器端的配置和Android客户端的示例代码,具体实现细节需参考这些文件内容。总的来说,实现Android客户端与使用Apache CXF和WSS4J的Web服务的认证...

    CXF webservice 示例工程(集成spring)

    本示例工程是基于CXF框架构建的一个Webservice应用,该应用集成了Spring框架,以实现更高效的服务管理和依赖注入。CXF是一个开源的Web服务框架,它允许开发者创建和部署SOAP和RESTful服务,同时也支持WS-*标准,如...

    webservice+cxf+spring

    【标题】:“WebService+CXF+Spring”是一个关于在Java环境中使用Apache CXF框架与Spring框架集成实现Web服务的专题。Apache CXF是一个开源的Web服务框架,它允许开发人员创建和部署SOAP和RESTful Web服务。Spring...

    WebService之CXF开发指南.rar

    CXF提供了丰富的安全特性,如WS-Security(WS-SecureConversation、WSS-Timestamp等),支持数字签名、加密、用户名令牌、X.509证书等多种安全策略。开发者可以根据需求选择合适的安全方案。 **7. 性能优化与调试**...

    纯java调用ws-security+CXF实现的webservice安全接口

    在CXF中,你可以配置`WSS4JOutInterceptor`来添加这些功能。 6. **测试调用**:最后,你可以通过CXF客户端调用Web服务接口,此时ws-security的设置将会自动应用到请求中,保证了调用的安全性。 在提供的压缩包文件...

    CXF V3.2.4 实现的WebService调用(带安全认证)

    2. **配置安全策略**:CXF支持通过`WSS4JOutInterceptor`进行安全策略配置。我们需要创建该拦截器并设置适当的属性,如`wsse:UsernameToken`用于用户名和密码认证,或者`wsse:Security`用于更复杂的认证机制。 ```...

    Cxf 和wss4j实现ws-security的demo

    CXF使用WSS4J实现WS-Security规范,本例的配置是Timestamp Signature Encrypt,具体使用可以参考我的博客http://blog.csdn.net/wangchsh2008/article/details/6708270

    cxf与spring整合,以及webservice传输验证demo

    &lt;bean id="wss4jOutInterceptor" class="org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor"&gt; &lt;prop key="action"&gt;UsernameToken &lt;prop key="passwordType"&gt;PasswordText &lt;prop key="wsse.username"&gt;...

    CXF webService所需要的jar包

    在这个“CXF webService所需要的jar包”中,我们看到的是一系列关键的库文件,这些文件是CXF运行和实现Web服务功能的基础。 1. **cxf-2.3.3.jar**:这是CXF的核心库文件,包含了CXF的主要功能和API,用于处理Web...

    Apache Cxf WebService整合Spring

    Apache Cxf WebService整合Spring 处理Map、非javabean式的复合类等CXF无法自动转化的类型 CXF为服务器端和客户端添加自定义拦截器进行权限检查验证并且控制台打印日志

    超简单的webservice调用

    【标题】"超简单的webservice调用"涉及的是在Java环境下使用Hutool库进行Web ...最后,如果想要扩展或优化这个示例,可以深入研究Hutool的其他功能,或者考虑使用其他的Web Service客户端库,比如Apache CXF或JAX-WS。

    CXF webservice初学笔记

    【CXF Webservice初学笔记】 Apache CXF 是一个开源的Web服务框架,它使得开发者可以轻松地创建和部署Web服务。本笔记将探讨CXF的基本概念、如何使用CXF构建Webservice以及与之相关的技术栈,如Spring、Struts2等。...

    WebService:Axis客户端调用需要身份验证的CXF服务

    要深入学习这个主题,可以参考博客“WebService:Axis客户端调用需要身份验证的CXF服务”。这个博客很可能详细解释了如何在实际代码中实现上述步骤,包括如何配置Axis客户端、如何处理认证头以及如何与CXF服务进行...

    CXF框架开发WebService示例及说明

    - **安全认证**:CXF 支持多种安全机制,包括消息头拦截器、WSS4J 和 X509 证书,确保服务的安全通信。 在演示环境中,我们使用 MyEclipse IDE、Tomcat 6 作为应用服务器,以及 CXF 版本为 2.5.5。从 CXF 官网...

    cxf+spring webservice jar包

    antlr-2.7.7.jar aopalliance-1.0.jar ...wss4j-1.6.7.jar xalan-2.7.1.jar xml-resolver-1.2.jar xmlbeans-2.5.0.jar xmlschema-core-2.0.3.jar xmlsec-1.5.2.jar xmltooling-1.3.2-1.jar xsdlib-2010.1.jar

    cxf 2.4.1 的所有jar包

    7. `wss4j-1.6.1.jar`: Web Services Security for Java(WSS4J)是Apache CXF项目的一部分,专门用于实现WS-Security规范,提供身份验证、消息完整性、加密等功能。 这些jar包组合在一起,为开发者提供了完整的CXF...

Global site tag (gtag.js) - Google Analytics