`

webservice security for java

 
阅读更多

Wss4j的学习----这是我第一次写东西。因为,我实在是发现了分享知识的重要性。因为现在的学习基本都是靠百度,google了。呵呵。进入正题。

简单说明:wss4j是,axis的实现WS-Wecurity安全机制的一个框架。
具备知识:java和axis知识。
运行环境:至少可以跑起来一个axis的程序。哪怕是一个helloworld。
必须的包:wss4j.jar官方地址:http://ws.apache.org/wss4j/
工作原理:我用一张图来说明一切,你会明白的。

  

是不是非常明白?
为了方便学习,我下载的是wss4j-bin-1.5.3.zip这个版本,因为里面有自带的几个例子。我来叫你跑起这些例子便于学习。
一步一步教你跑起这些例子:
  1. 解压wss4j-bin-1.5.3.zip到wss4j文件夹。看到
  一个比较简单的例子在samples里,复杂一点的例子在interop里。我们先来进行简单的例子。
  2. 在eclipse里建个新的项目,我这里叫做“testwss4j”,建包,和类和官方文件夹相同:
主要的文件说明:
       org.apache.axis.samples.wssec.doall.axisSec包:
            是目标服务器端程序。是org.apache.axis.samples.wssec.doall包里的sec.wsdl文件生成(生成方法见axis学习文档)的。
       org.apache.axis.samples.wssec.doall包:
            PWCallback.java文件是,headler对xml文件进行签名,加密,解密的类。
            Tester.java是客户端测试类。
            Client_deploy.wsdd文件是,客户端签名,加密的配置文件。
3. 主要类说明
        除了PWCallback.java是wss4j.jar中的应用,其他类均为axis的应用。不做过多说明。
      PWCallback.java说明:
41到46行的说明是指,这里是给已经加入了user或者keystore alias的soap消息加入或者密码。可以是identifier的形式也可以是直接设置密码。由于是例子,这里是最简单的给一个user加入一个最简单的密码。
4. 运行例子
       运行例子之前会发现项目会有很多错误,用你习惯的方式导入项目testwss4j所需要的包。包括axis的所有包和wss4j.jar。我的包的列表:
如果没有错误,首先启动服务器,发布目标服务器程序。如果一切顺利
可以run as java applicationà org.apache.axis.samples.wssec.doallTester.java。
会得到如下结果:
如果你在PWCallback.java加入断点就会发现,根本没有调用加密程序。不过得到结果至少知道这个程序是畅通的。下面我们开始加密。
没有加密的config-deploy.wsdd的配置文件中SecHttp的服务配置为:
加入加密配置文件之后为:
注意红色框的位置为加密的配置。说明,目标服务器端接收的soap消息必须是加密的。重启服务器,允许Tester.java就会发现报错:
说明你的配置完全正确,因为请求没有加密所以报错。修改Tester.java:
红色框中为修改的部分。注意client_deploy.wsdd的地址位置要用“//”分割。重启服务器,运行Tester.java就会得到刚刚的结果了。如果加入断点就会进入方法。
5.复杂例子。
在interop文件夹下:
ping.wsdl是服务器接口描述文件。org文件下包括服务器接口的测试类。也包括服务器接口,但是,直接在eclipse里打开会有很多错误,我因为懒得改正错误,所以用ping.wsdl从新生成了服务器端接口,在axis的学习里就有。但是生成之后就会发现一个问题,本身服务器接口的包是org.apache.ws.axis.oasis.ping,服务器接口的类在这个包下,如果用文件夹里的ping.wsdl生成的包为org.xmlsoap .Ping,所以服务器接口都在这个包下。直接放在项目里就会发现很多关于包的错误。为了和原始包保持一直的思想,修改ping.wsdl,生成包org.apache.ws.axis.oasis.ping。修改了三个地方:
第5行:xmlns:tns=http://xmlsoap.org/Ping修改为xmlns:tns=http://oasis.axis.ws.apache.org/ping
第9行:targetNamespace=http://xmlsoap.org/Ping 修改为:targetNamespace="http://oasis.axis.ws.apache.org/ping"
第12行:<s:schema elementFormDefault="qualified" targetNamespace="http://xmlsoap.org/Ping">修改为<s:schema elementFormDefault="qualified" targetNamespace="http://oasis.axis.ws.apache.org/ping">其他地方没有做改动覆盖原来的服务器接口。项目中的包都按照org.apache.ws.axis.oasis.ping这个包的形式修改。导入项目后如图
发布服务器端接口,等工作不再缀述。
这个项目给了页面测试,现在把页面也导入到项目里。按照原有文件夹的形式,在项目下新建文件夹webapps导入文件如图:
页面interop.jsp是项目ping的测试页面。如果测试通过页面如下:
我的本地测试端口为7070。Tomcat默认是8080。7个按钮,7个不同等级的安全身份验证。第1个和上面简单的例子是一样。我只介绍一个稍微复杂的第3个端口。发生请求和返回请求都加入身份验证,并且是jks证书验证。wss4j2.jsp页面需要修改,原始文件没有加入wss4j验证,包的引入也需要修改。修改部分如下:
其他部分没有修改。
由于只测试接口3,服务名为Ping3,为服务器端加入wss4j验证,修改服务器端配置文件(server-congig.wsdd)为:
红色框:
为服务器端解密并验证签名。验证签名的配置文件为test.properties(官方给出配置文件为wsstest.proterties)。这个文件默认放在classes文件夹下才可以找到(应该可以修改位置)。验证签名的类为:org.apache.ws.axis.oasis.PWCallback1。如何验证见这个类。
黄色框:
       为服务器端返回客户端时候对消息的签名配置。配置文件和接收请求的相同。因为是服务器端向客户端请求,所以请求用户名为“server”,接收端用户名为“client”。最后一行属性为,签名加密的算法。
修改客户端配置文Client_deploy.wsdd
红色框: 
       为向服务器端签名加密申请,申请用户名为client,接收服务器为server。和服务器端请求返回基本相同。
黄色框:
       和服务器端接收请求基本相同。
在客户端也放上配置文件,test.properties(官方给出配置文件为wsstest.proterties)。如果没有问题,可以启动服务器,运行程序。
选择interop3的按钮。会发现出现错误:
WSHandler:Encryption: error during message processingorg.apache.ws.security.WSSecurityException: An unsupported signature or encryption algorithm was used (unsupported key transport encryption algorithm: No such algorithm: http://www.w3.org/2001/04/xmlenc#rsa-1_5)
查了资料发现需要一个包:bcprov-jdk15-138.jar。为什么需要,我没有研究,但是加入之后就没有错误了。可以顺利通过,结果为:
Interop2.jks是用keytool工具生成的,我会另做说明。
Wss4j的应用就是这样。
分享到:
评论

相关推荐

    java webService接口开发案例

    Java WebService接口开发是将Java应用程序暴露为网络服务的一种方式,允许不同系统间的数据交换和交互。本案例将深入探讨如何使用Java实现Web服务的创建、发布和调用。 一、理解WebService WebService是一种基于...

    java+soap+webservice 调用模拟

    3. **Java中的SOAP调用**:在Java中,我们通常使用JAX-WS(Java API for XML Web Services)框架来处理SOAP通信。JAX-WS提供了多种工具,如wsimport,可以从WSDL文件生成客户端代理类。这些代理类提供了调用Web服务...

    javaWebService 关于讲解java调用webservice的知识

    - **JAX-WS(Java API for XML Web Services)**:是Java平台的标准,用于创建和消费Web服务。它提供了从Java类到WSDL的自动绑定,简化了开发过程。 - **Axis2**:Apache基金会的一个开源工具,用于生成客户端和...

    webservice简单实现例子java工程

    4. **JAX-WS (Java API for XML Web Services)**: JAX-WS是Java平台上的标准API,用于构建和消费Web服务。它简化了Web服务的开发过程,允许开发者使用注解(Annotations)来定义服务接口和服务实现。 5. **服务端...

    java 调用 webService工具类

    Java中的JAX-WS(Java API for XML Web Services)框架是处理SOAP WebService的标准库。 3. **JAX-WS**: JAX-WS提供了创建和消费SOAP WebService的API,包括`javax.jws.WebService`注解用于声明服务端点,以及`...

    java调用webservice工程

    在Java中,我们通常使用JAX-WS(Java API for XML Web Services)或者JAX-RS(Java API for RESTful Web Services)来实现对WebService的调用。 **1. JAX-WS介绍** JAX-WS是Java中用于创建和消费SOAP(Simple ...

    webService入门教程_java_webservice_

    2. **Java与WebServices**:Java提供了多种框架和技术来创建和消费WebServices,如JAX-WS(Java API for XML Web Services)和JAX-RS(Java API for RESTful Web Services)。JAX-WS主要用于构建SOAP-based的Web...

    java的webservice服务端程序

    - **JAX-WS(Java API for XML Web Services)**:Java SE和Java EE提供的一套API,用于简化WebService的开发。JAX-WS提供了从Java类到SOAP消息的自动绑定,使得开发者可以像编写普通Java方法一样实现WebService。 ...

    java webservice教程

    这个教程“Java WebService教程”涵盖了使用Java技术开发Web服务的相关知识,包括API文档和示例,是学习Java WebService的理想资源。 首先,Web服务的核心概念是SOAP(Simple Object Access Protocol),它是一种...

    Java webservice cxf客户端调用demo和服务端

    CXF允许开发者使用Java编程模型来创建和消费Web服务,这包括JAX-WS(Java API for XML Web Services)和JAX-RS(Java API for RESTful Web Services)。在本示例中,我们关注的是JAX-WS,它用于构建SOAP Web服务。 ...

    JAVA的WebService支持.rar

    CXF支持两种主要的Web服务规范:Java API for RESTful Web Services (JAX-RS) 和 Java API for XML Web Services (JAX-WS)。对于SOAP服务,CXF通过Java源代码生成WSDL文档,而对RESTful服务,它可以将Java接口直接...

    C#调用JavaWebService(客户端)

    Java开发者通常使用JAX-WS(Java API for XML Web Services)框架来创建WebService。这包括编写一个Java类,该类包含公共方法,这些方法会被SOAP消息所调用。接着,使用工具(如`wsimport`或Apache CXF的`wsdl2java...

    SOA Using Java in Webservice

    Java作为一种广泛使用的编程语言,提供了丰富的库和框架,如JAX-WS(Java API for XML Web Services)和JAX-RS(Java API for RESTful Web Services),用于创建、发布和消费Web服务。这些服务可以是基于SOAP...

    java调用webservice接口方法.rar

    Java中调用WebService主要依赖于JAX-WS(Java API for XML Web Services)框架。JAX-WS提供了一种简单的编程模型,使得开发者可以方便地创建和消费SOAP WebServices。 4. **创建WebService客户端** 在Java中,...

    WebService案例,JAVA和.NET下皆可以访问的一个小案例

    在Java中,我们通常使用JAX-WS(Java API for XML Web Services)来创建和消费WebService。以下是一个简单的步骤: 1. 定义服务接口:首先,我们需要创建一个Java接口,定义服务的方法。例如: ```java public ...

    JAVA自带实现webservice.docx

    例如,你可以在服务的web.xml文件中配置安全约束,或者使用Java安全框架(如Spring Security)来实现更复杂的授权逻辑。 总的来说,Java自带的JAX-WS提供了一套完整的工具链,使得开发、部署和调用Web服务变得相对...

    using java webservice 随书源码

    4. **JAXB (Java Architecture for XML Binding)**: JAXB是Java中用于XML和Java对象之间数据转换的标准框架。它使得在Web服务中处理XML数据变得更加容易。JAXB会自动将Java对象序列化为XML,以及将XML反序列化回Java...

    Axis2教程和java调用webservice的各种方法总结

    - **JAX-WS(Java API for XML Web Services)**:Java平台的标准API,用于生成和消费Web服务。通过注解和接口,可以轻松地创建和调用Web服务。 - **Apache CXF**:一个开源框架,支持SOAP、RESTful等多种Web服务...

    java开发webservice.doc

    在Java 6及更高版本中,JAX-WS(Java API for XML Web Services)已经成为标准的一部分,使得开发Web Service变得更加简洁和方便。本篇文章将深入探讨使用Java 6开发Web Service的基本步骤和原理。 首先,我们需要...

    Spring_WebService源码

    4. **Jaxb2Marshaller**: Spring提供的JAXB(Java Architecture for XML Binding)marshaller/unmarshaller,用于在Java对象和XML之间进行转换。 **三、Spring WebService的工作流程** 1. **定义契约(Contract)*...

Global site tag (gtag.js) - Google Analytics