`
conkeyn
  • 浏览: 1524829 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

wss4j和axis2实现WS-Security(2)

 
阅读更多

转自:http://hi.baidu.com/zhaopengletter/blog/item/44a3bdfa9eda29244e4aea48.html

 

4.3   生成 .aar 服务包

下边就可以根据一个服务器类 SimpleService 一个 service.xml 打包生成一个 wsc.aar 做为服务器端的程序 首先将这个 SimpleService 类打包 , 然后把 service.xml 放在打包后的 MATE-INFO 下边

这样服务器端程序 wsc.aar 就完成了 下边把 wsc.aar   copy D:\program\Tomcat6.0\webapps\axis2\WEB-INF\services 目录下 ( 这里是以我的机器做为例子的 )

然后重启 tomcat 输入 http://127.0.0.1:8080/axis2/services/listServices

就可以看到我们部署到服务器上的服务了。

4.4   编写模拟第三方测试程序

下面我写一个模拟第三方的程序调用 webservice 的一个例子

在包 com.neusoft.wss4j.rempart.demo.client 中的 Client

它的内容如下 :

package com.neusoft.wss4j.rempart.demo.client;

import java.io.Reader;

import java.io.StringReader;

import org.apache.axiom.om.OMAbstractFactory;

import org.apache.axiom.om.OMElement;

import org.apache.axiom.om.OMFactory;

import org.apache.axiom.om.OMNamespace;

import org.apache.axis2.addressing.EndpointReference;

import org.apache.axis2.client.Options;

import org.apache.axis2.client.ServiceClient;

import org.apache.axis2.context.ConfigurationContext;

import org.apache.axis2.context.ConfigurationContextFactory;

import org.jdom.Document;

import org.jdom.Element;

import org.jdom.input.SAXBuilder;

public class Client

{

     public static void main(String[] args) throws Exception

     {

         ConfigurationContext ctx = ConfigurationContextFactory

                 .createConfigurationContextFromFileSystem(

                         "D:/eclipse3.2/workspace/wsc/WebRoot/WEB-INF",             "D:/eclipse3.2/workspace/wsc/WebRoot/WEB-INF/conf/axis2.xml" );

         ServiceClient client = new ServiceClient(ctx, null);

         Options options = new Options();

         options.setAction(" urn:echo ");

         options.setTo(new EndpointReference(

                 " http://localhost:8080/wsc/services/wsc "));

          client.setOptions(options);

         OMElement response = client.sendReceive(getPayload(" (*^__^*) 嘻嘻…… " ));

         OMElement element = response.getFirstElement();

         // 把返回的 OMElement 对象转换为 xml 数据

         SAXBuilder builder = new SAXBuilder();

         Reader in = new StringReader(element.toString());

         Document doc = null;

         try

         {

             doc = builder.build(in);

             Element Element = doc.getRootElement();

             String aa = Element.getTextTrim();

             System.out.println(aa);

          }

         catch (Exception e)

         {

             System.out.println(e.getMessage());

         }

     }

     private static OMElement getPayload(String value)

     {

         OMFactory factory = OMAbstractFactory.getOMFactory();

         OMNamespace ns = factory.createOMNamespace(

         " http://services.demo.rempart.wss4j.neusoft.com/xsd ","ns1");

         OMElement elem = factory.createOMElement(" echo ", ns);

         OMElement childElem = factory.createOMElement("param0", null);

         childElem.setText(value);

          elem.addChild(childElem);

         return elem;

     }

}

这个测试类就不多说了, 粉色 的部分是需要注意的地方。

还有个客户端的 axis2.xml 需要说明一下

他的主要内容如下只要把这部分粘贴到原来的axis2.xml即可

<module ref="rampart" />

<parameter name="OutflowSecurity">
       <action>
         <items>Timestamp Signature</items>
         <user>client</user>
         <signaturePropFile>keys/client.properties</signaturePropFile>
         <passwordCallbackClass>com.neusoft.wss4j.rempart.demo.services.PWCBHandler</passwordCallbackClass>
         <signatureKeyIdentifier>DirectReference</signatureKeyIdentifier>
       </action>
     </parameter>

     <parameter name="InflowSecurity">
       <action>
         <items>Timestamp Signature</items>
         <signaturePropFile>keys/client.properties</signaturePropFile>
       </action>
     </parameter>

注意一下 红色 的部分他是当客户端向服务器端发送数据时,首先访问 com.neusoft.wss4j.rempart.demo.services.PWCBHandler 这个类,得到访问权限和加密信息的文件密码,然后通过加密信息的文件密码和 keys/client.properties 文件找到加密需要的文件 client.jks 把信息加密发送给服务器端, 粉色 部分是通过 keys/client.properties 文件找到解密需要的文件 client.jks 来解密服务器端返回的加密信息。

Keys 文件下的 client.properties 内容如下:

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 = apache

org.apache.ws.security.crypto.merlin.file = keys/client.jks

 

五、总   

整理一下思路

1 客户端发送消息给服务器端 : 如果客户端想请求服务器端首先读取客户端配置文件 axis2.xml 文件,得到访问的用户 <user>client</user> 然后找到 com.neusoft.wss4j.rempart.demo.services.PWCBHandler 类,看用户是否有访问服务的权限,如果有则把 client.jks 文件的密码给用户 client client 通过密码在 axis2.xml 文件中找到 <signaturePropFile>keys/client.properties</signaturePropFile> 找到 client.properties 文件,在 client.properties 文件中找到 client.jks 文件,使用该文件的 client 私钥 从而实现把传送的信息加密,然后把加密的信息发送到服务器端。

2 服务器端接收客户端发送来的消息 : 服务器端接收到消息,然后读取 service.xml 文件找到 <signaturePropFile>keys/service.properties</signaturePropFile> 从而找到 service.properties 文件,通过该文件找到 service.jks 文件使用该文件的 client 的公钥

解密客户端传送来的信息。

3 服务器端返回信息给客户端 : 获得客户端传送过来的明文信息后,从 service.xml 文件

得到加密的用户 <user>service</user> 通过

<passwordCallbackClass>

com.neusoft.wss4j.rempart.demo.services.PWCBHandler

</passwordCallbackClass>

找到验证类 PWCBHandler 得到加密需要的 service.jks 的加密密码 apache

通过 <signaturePropFile>

     keys/service.properties

     </signaturePropFile> 找到 service.properties 文件,通过该文件找到 service.jks 文件,通过该文件的 service 的私钥 把需要发送给客户端的信息加密。然后发送给客户端

4 客户端接收服务器端返回的消息 : 客户端端接收到消息,然后读取 axis2.xml 文件找到 <signaturePropFile>keys/service.properties</signaturePropFile> 从而找到 client.properties 文件,通过该文件找到 client.jks 文件使用该文件的 service 的公钥

解密服务器端返回来的信息。

分享到:
评论

相关推荐

    ws-security 和wss4j的jar包

    2. **wss4j-ws-security-dom.jar**:DOM(Document Object Model)版本的WS-Security实现,用于处理基于DOM的XML消息。 3. **wss4j-ws-security-stax.jar**:STAX(Streaming API for XML)版本的实现,适用于处理...

    ws-security 和 wss4j的jar包

    `ws-security`和`wss4j`就是两个关键的库,它们专注于为基于SOAP的Web服务提供安全支持。这两个组件主要涉及到WS-Security(Web Services Security)规范,该规范定义了一套标准来确保Web服务消息的机密性、完整性和...

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

    2. **创建安全上下文**:为了实现身份验证,你需要创建一个`WSS4JOutInterceptor`,并提供安全相关的配置,比如使用`UsernameToken`进行基本认证。这可以通过`WSSecurityProperties`类来完成。 3. **添加拦截器**:...

    wss4j的JAR包

    **标签“wss4j和axis2”关联知识点** - **Apache Axis2**:Axis2是Apache软件基金会的一个开放源代码Web服务引擎,它提供了一种基于SOAP的消息传递模型。Axis2与WSS4J结合,可以提供端到端的Web服务安全解决方案。 ...

    Axis2版本的头鉴权应用

    2. **WSS4J(Web Services Security for Java)**:Apache Axis2通常使用WSS4J库来处理WS-Security相关的操作,包括头鉴权。 3. **用户名令牌(Username Token Profile)**:这是WS-Security中的一种常见认证方式,...

    axis2客户端调用服务端,带用户身份认证

    2. **配置客户端处理程序**:如果使用WS-Security,需要在客户端的 AxisClient 或 ServiceClient 实例中添加适当的处理程序,如WSS4J处理程序,这些处理程序负责在请求中添加必要的安全令牌。 3. **发送安全请求**...

    Axis2中文手册

    2. **Rampart**:是Axis2的一个模块,主要负责WS-Security的实现,可能与WSS4J协同工作,确保服务的安全性。 3. **Sandesha2**:实现了WS-ReliableMessaging规范,确保消息的可靠传输,即使在网络不稳定的情况下也能...

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

    Axis是一个开放源码的SOAP栈,常用于创建和部署Web服务,而CXF则是一个更现代的Java框架,也用于构建和消费Web服务,支持WS-Security等高级特性。 首先,理解身份验证在Web服务中的重要性。身份验证是确保只有授权...

    WebService服务的安全控制程序例子源码[Security- Web services the secure ]

    在"Server"部分的源码中,可能会看到实现这些安全特性的代码,如使用X.509证书进行SSL/TLS握手,或者使用WSS4J库实现WS-Security头的添加和验证。"Client"则可能包含相应的调用和服务请求,同时处理服务器返回的加密...

    关于rampart encrypt的问题

    Rampart模块基于WSS4J(Web Services Security for Java)库,该库提供了实施WS-Security规范的各种工具。在源码中,我们可以看到Rampart如何创建和管理加密密钥,以及如何在SOAP消息中插入加密元素。开发者可以通过...

    apache开源项目列表.txt

    WSS4J是WS-Security标准的实现,提供了安全的Web服务通信,支持加密和数字签名等功能。 #### 13. Apache WSRF WSRF实现了Web Services Resource Framework标准,提供了一种管理Web服务资源的机制,增强了服务的管理...

    axis web service

    - **加密和签名**:使用WSS4J库来加密和签名SOAP消息,确保数据在传输过程中的安全。 - **强化部署**:采取措施来防止未经授权的访问,例如设置访问控制列表。 - **输入验证**:确保所有接收到的数据都是合法的,...

    axis1.4 + wrapped + encrypt + signature

    4. **整合过程**:在Axis1.4中实现Wrapped样式加密和签名,开发者需要配置WSS4J(Web Services Security for Java)库,该库提供了在SOAP消息上添加安全头的功能。这包括设置加密和签名的策略,如使用的算法、密钥...

    axis部署webservice使用到资源库

    9. **XML Security Libraries** (如wsse.jar, wss4j.jar): 在安全性要求较高的场景下,这些库提供了Web服务安全标准的支持,如WS-Security,用于加密、签名和身份验证。 10. **Protocol Handlers** (如httpclient....

    webservice客户端与服务器端的实现demo

    - **服务器端实现**:首先,定义服务接口和实现类,然后使用XFire或Axis工具发布为Web服务。发布时,需要指定服务的URI和WSDL文件位置。 - **客户端实现**:获取服务器发布的WSDL文件,使用XFire或Axis提供的工具...

    xfire 初体验

    5. **wss4j-1.5.1.jar**:Web Services Security for Java,提供安全相关的支持,如数字签名和加密,确保Web服务的安全通信。 6. **wstx-asl-3.2.0.jar**:Woodstox,一个高效的XML流解析器和生成器,用于处理XML...

    国际天气webservice wsdl地址

    `WSS`可能指的是Web Service的安全性,如使用WS-Security标准来保护数据传输过程。 总的来说,这个主题涉及的技术点包括Web Service架构、WSDL描述、SOAP通信、API使用、编程实践以及可能的安全措施。对于开发者来...

Global site tag (gtag.js) - Google Analytics