`

Web Service修炼之五WS-Security

 
阅读更多

1.服务器实现 

   serverStore.jks拷贝到<工程目录>/src/META-INF/xfire的目录下

1、insecurity.properties文件,放在META-INF/xfire/下

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=scpass //serverStore.jks的访问密码
org.apache.ws.security.crypto.merlin.file=META-INF/xfire/serverStore.jks//密钥库文件所在位置

2、service.xml文件,放在META-INF/xfire/下

<?xml version="1.0" encoding="UTF-8"?>

<!-- START SNIPPET: services -->

<beans xmlns="http://xfire.codehaus.org/config/1.0"> 

 <service> 

    <name>SayHelloService</name>

    <namespace>http://com.test.wsses/SayHelloService

        </namespace>

    <serviceClass>com.test.wsses.SayHelloService

        </serviceClass>

    <implementationClass>com.test.wsses.SayHelloServiceImpl

        </implementationClass> 

<inHandlers> 

   <handler 

    handlerClass="org.codehaus.xfire.util.dom.DOMInHandler"/>

    <bean class="org.codehaus.xfire.security.

        wss4j.WSS4JInHandler" xmlns="">

                <property name="properties">

                    <props>

                        <prop key="action">Encrypt Signature</prop> 

 <!-- 组合动作用空格分隔(报文加密和数字签名);XFire中,动作的执行顺序和动作的编写顺序一致,如“Encrypt Signature”表示先解密再验证数字签名(对于InHandler) -->

<!-- 验证签名须使用client数字证书,属性文件需要提供访问密钥库client数字证书的配置 --> 

 

                        <prop key="signaturePropFile">

                            META-INF/xfire/insecurity.properties

                        </prop>

 <!-- 解密须使用server的私钥,属性文件必须提供访问密钥库中私钥的相关配置 -->

                        <prop key="decryptionPropFile">

                            META-INF/xfire/insecurity.properties

                        </prop>

             //指定一个密码回调实现类

                        <prop key="passwordCallbackClass">

                            com.test.wsses.PasswordHandler

                        </prop>

                    </props>

                </property>

            </bean>

    </inHandlers>

 </service> 

</beans>  

<!-- END SNIPPET: services -->

3、PasswordHandler类

package com.test.wsses;

import java.io.IOException;

import java.util.HashMap;

import java.util.Map;

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 PasswordHandler implements CallbackHandler {

    @SuppressWarnings("unchecked")

    private Map passwords = new HashMap();

 

    @SuppressWarnings("unchecked")

    public PasswordHandler() {

        passwords.put("server""serverpass");

        passwords.put("client""clientpass");

    }

 

    public void handle(Callback[] callbacks) throws IOException,

            UnsupportedCallbackException {

        System.out.println("Handling Password!");

        WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];

        String id = pc.getIdentifer();

        System.out.println("id:"+id+" ,password:"+(String) passwords.get(id));

        pc.setPassword((String) passwords.get(id));

    }

}

2.客户端实现

1、PasswordHandler

package com.test.wsses;

import java.io.IOException;

import java.util.HashMap;

import java.util.Map;

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 PasswordHandler implements CallbackHandler {

    @SuppressWarnings("unchecked")

    private Map passwords = new HashMap();

 

    @SuppressWarnings("unchecked")

    public PasswordHandler() {

        passwords.put("server""serverpass");

        passwords.put("client""clientpass");

    }

    public void handle(Callback[] callbacks) throws IOException,

            UnsupportedCallbackException {

        System.out.println("Handling Password!");

        WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];

        String id = pc.getIdentifer();

        System.out.println("id:"+id+" ,password:"+(String) passwords.get(id));

        pc.setPassword((String) passwords.get(id));

    }

}

2、outsecurity.properties文件,位于<工程目录>/src/下。 

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=scpass //clientStore.jks的访问密码
org.apache.ws.security.crypto.merlin.file=clientStore.jks  //密钥库文件所在位置

  clientStore.jks拷贝到<工程目录>/src目录下。

3、客户端访问类

package com.test.wsses.client;

import java.net.MalformedURLException;

import org.apache.ws.security.WSConstants;

import org.apache.ws.security.handler.WSHandlerConstants;

import org.codehaus.xfire.client.Client;

import org.codehaus.xfire.client.XFireProxyFactory;

import org.codehaus.xfire.security.wss4j.WSS4JOutHandler;

import org.codehaus.xfire.service.Service;

import org.codehaus.xfire.service.binding.ObjectServiceFactory;

import org.codehaus.xfire.transport.http.CommonsHttpMessageSender;

import org.codehaus.xfire.util.dom.DOMOutHandler;

import com.test.wsses.PasswordHandler;

public class SayHelloClient {

public static void main(String args[]){ 

   String serviceURL = "http://localhost:8080/wsses/services/SayHelloService";

   //创建service对象

   Service serviceModel = new ObjectServiceFactory().create(SayHelloService.class);

   XFireProxyFactory serviceFactory = new XFireProxyFactory();

   try{

    //获取服务对象

SayHelloService service = (SayHelloService) serviceFactory.create(serviceModel, serviceURL);

   

    //忽略http连接的超时时间,0为不设置超时时间,》=1为超时毫秒数

    Client client = Client.getInstance(service);

    client.setProperty(CommonsHttpMessageSender.HTTP_TIMEOUT"0");

     //WS-Security

      WSS4JOutHandler wsOut = new WSS4JOutHandler(); 

      String actions =WSHandlerConstants.ENCRYPT + " " + WSHandlerConstants.SIGNATURE//组合动作用空格分隔     

         wsOut.setProperty(WSHandlerConstants.ACTION, actions);

         //加密属性设置:使用server数字证书进行加密

         wsOut.setProperty(WSHandlerConstants.ENCRYPTION_USER"server"); 

         wsOut.setProperty(WSHandlerConstants.ENC_PROP_FILE"outsecurity.properties");

         

         //签名属性设置:使用client私钥进行签名

         wsOut.setProperty(WSHandlerConstants.USER"client"); 

         wsOut.setProperty(WSHandlerConstants.SIG_PROP_FILE"outsecurity.properties");

         wsOut.setProperty(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PASSWORD_DIGEST);

             

         wsOut.setProperty(WSHandlerConstants.PW_CALLBACK_CLASS, PasswordHandler.class.getName());

         wsOut.setProperty(WSHandlerConstants.SIG_KEY_ID"IssuerSerial");

         client.addOutHandler(new DOMOutHandler());

         client.addOutHandler(wsOut);

  

 //调用服务

 String helloMsg = service.sayHello("dabing");

 System.out.println(helloMsg);

 helloMsg = service.sayHello(null);

 System.out.println(helloMsg);

   } catch (MalformedURLException e){ 

    e.printStackTrace();

   }

}

}

 

运行结果如下:

Handling Password!

id:client ,password:clientpass

dabing,早上好,还没有去工作吗 ?

Handling Password!

id:client ,password:clientpass

你叫什么名字呢?

<!--EndFragment-->
分享到:
评论

相关推荐

    ws-security 和wss4j的jar包

    WS-Security(Web Services Security)是由OASIS组织制定的一套标准,它定义了一系列的安全机制来保护Web服务消息,包括认证、加密、完整性保护等。而Apache WSS4J(Web Services Secure Utilities for Java)则是...

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

    CXF是一个开源的服务框架,它允许开发人员创建和消费各种Web服务,而ws-security(Web Services Security)则是用于保护Web服务的标准。 首先,我们要理解ws-security的概念。它是 Oasis Web服务安全技术委员会制定...

    ws-security jar

    【标题】"ws-security jar" 是一个与Web服务安全相关的Java库,主要用于实现Web服务的安全标准,如WS-Security(Web Services Security)。在Web服务的世界里,安全性是至关重要的,因为它们经常涉及到跨网络的数据...

    基于XFire实施WS-Security

    WS-Security则位于OSI模型的应用层,直接作用于SOAP消息之上,使得安全性与传输层无关,更符合Web Service的设计原则。 XFire,作为一个Java Web Service框架,通过Apache的WSS4J库来支持WS-Security。WSS4J负责...

    ws-securitypolicy

    #### 五、WS-SecurityPolicy的实现与应用 1. **安全性保障**:通过定义和协商安全策略,确保Web服务之间的通信符合预设的安全标准。 2. **互操作性**:由于该规范被广泛采纳和支持,因此能够在不同的技术栈和服务...

    ws-security 和 wss4j的jar包

    这两个组件主要涉及到WS-Security(Web Services Security)规范,该规范定义了一套标准来确保Web服务消息的机密性、完整性和身份验证。 `ws-security`是Java EE环境中一个抽象的概念,它代表了实现WS-Security规范...

    XFire中实现WS-Security经典

    标题"XFire中实现WS-Security经典"表明了本文将深入探讨如何在XFire框架中实现Web服务安全标准——WS-Security。WS-Security(Web Services Security)是 Oasis 标准组织定义的一套用于保护Web服务交互的安全规范,...

    ws-security三个jar包

    标题中的“ws-security三个jar包”指的是用于Web服务安全性的三个关键库文件,它们是ISNetworksProvider.jar、tsik.jar和ws-security.jar。在Web服务(Webservices)领域,安全是一个至关重要的方面,特别是在交换...

    CXFWS-Security

    1)参考: ...2)CXFWS工程是基于WS-Security规范,实现X.509身份验证的,同时实现签名和加密 keytool 工具的使用参考 http://hi.baidu.com/qianshuifanchuan/blog/item/6291b8510009ad3c42a75b8e.html ...

    xfire1.2.6 ws-security示例

    WS-Security(Web Services Security)是基于SOAP消息的安全标准,用于保护Web服务免受各种攻击,如篡改、伪造等。在这个示例中,我们将探讨如何在xfire1.2.6中实现和应用WS-Security。 WS-Security标准由OASIS...

    ws-security java-mail

    在IT行业中,`ws-security` 和 `java-mail` 是两个重要的技术领域,分别涉及Web服务安全和电子邮件处理。本文将详细探讨这两个领域的相关知识点,并结合提供的文件信息进行讲解。 首先,`ws-security`(Web ...

    cxf+ws-security-JAR

    【标题】"cxf+ws-security-JAR"指的是Apache CXF框架与WS-Security整合创建的JAR包,用于在Web服务(Web Service)中实现基于用户名和密码的身份验证安全调用。 【描述】该描述指出,这个项目是关于如何使用Apache ...

    Improving WS-Security Performance with a Template-Based Approach

    在实际应用中,WS-Security处理过程中的性能问题往往是关注的重点之一,这限制了其更广泛的采用。传统的WS-Security处理器通常基于DOM(Document Object Model),虽然这种实现方式便于编程,但DOM解析XML文档时需要...

    Web 服务规范_第 4 部分:WS-Security源码

    这一规范的第4部分,WS-Security(Web Services Security),是其中的关键组件,它专注于提供Web服务的安全性,确保通信过程中的数据完整性和机密性。本文将深入探讨WS-Security源码的实现原理和关键功能。 WS-...

    我的cxf与ws-security

    【标题】"我的cxf与ws-security"涉及的是在Java Web服务开发中使用Apache CXF框架集成WS-Security(Web Service Security)的安全机制。Apache CXF是一个开源的、功能丰富的Web服务框架,它允许开发者创建和消费各种...

    WS-Security.pdf

    在众多安全保障标准中,WS-Security脱颖而出,成为处理Web Services安全问题的核心框架。本文将深入探讨WS-Security的原理及其实现机制,重点关注XML Signature、XML Encryption、SAML、WS-Trust等关键技术。 ### ...

    ws-security.jar

    WS-Security实现

    WS-Security构筑安全的SOAP消息调用

    WS-Security的主要目标之一是实现端到端的安全性,确保SOAP消息即使通过不安全的中间节点也能安全可靠地从服务请求者到达服务提供者。 #### 二、WS-Security的核心功能 WS-Security规范通过以下几种方式来提高Web...

    WS-Security 安全

    《深入解析WS-Security:构建安全的Web服务》 在当今数字化时代,信息安全成为企业和组织不可忽视的关键议题,尤其在Web服务领域,如何确保数据在传输过程中的安全性和完整性,成为了亟待解决的问题。WS-Security...

    Cxf 和wss4j实现ws-security的demo

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

Global site tag (gtag.js) - Google Analytics