`
king_tt
  • 浏览: 2232764 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

jax-ws之webservice security(安全)教程第一天

阅读更多

前言:

在前面的“5天学会jaxws-webservice教程”,我们讲了基本的jax-ws的使用。

Jax-ws是业界公认的标准的webservice,它已经成为了一个行业界标准,包括cxf,其实cxf也是调用的jax-ws为标准的基于spring的webservice框架。

同时,大家都知道世界上除了j2ee体系外,还存在.net体系,同时有过相关经验的同事们也知道用ws-security无非就是涉及到“加密”,“解密”,而JAVA的x509所涉及到的证书,公钥,私钥与.net体系之间是无法通用的。

但是webservice是因该属于无所谓语言的一个标准,因此为了让j2ee的webservice与.net的webservice能够互相调用(当然包括ws-security里的加密解密),SUN与微软联合推出了一个:WCF。

WCF是Windows Communication Foundation的缩写,原来代号为Indigo,它是MS为SOA(Service Oriented Architecture 面向服务架构)而设计的一套完整的技术框架。利用它能够开发出分布式(Distributed)应用程序,而且开发难度相比以前的.NETRemoting和ASP.NETXML Web Service等都有了大幅度的降低。

那么搞J2EE的人如何去支持这个WCF呢?我们不可能去用.net的语言在J2EE工程中写符合WCF的Webservice?

因此,SUN在jax-ws上推出了一套框架叫:metro,用于支持WCF的webservice.

在下面的介绍中,我们会先以一个jax-ws结合SSH框架的例子来作为一个承上启下的开头,现在开始我们的ws-security之旅吧。

该教程为基础篇,不涉及到QoS与wcf相关,只有阅读完了本教程,才能过渡到真正的jax-ws的ws-security。真正的可扩展的符合wcf标准的WebserviceQoS会在另一篇教程中(METRO)详细介绍。

 

 

jax-ws集成SSH框架

1. 引入两个额外的jar包

 

jaxws-spring-1.8.jar与xbean-spring-2.8.jar。

 

2. 修改applicationContext.xml文件

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:p="http://www.springframework.org/schema/p"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:aop="http://www.springframework.org/schema/aop"

xmlns:tx="http://www.springframework.org/schema/tx"

xmlns:context="http://www.springframework.org/schema/context"

xmlns:ws="http://jax-ws.dev.java.net/spring/core"

xmlns:wss="http://jax-ws.dev.java.net/spring/servlet"

xsi:schemaLocation="

http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

http://www.springframework.org/schema/tx

http://www.springframework.org/schema/tx/spring-tx-3.0.xsd

http://www.springframework.org/schema/aop

http://www.springframework.org/schema/aop/spring-aop-3.0.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context-3.0.xsd

http://jax-ws.dev.java.net/spring/core

http://jax-ws.dev.java.net/spring/core.xsd

http://jax-ws.dev.java.net/spring/servlet

http://jax-ws.dev.java.net/spring/servlet.xsd">

请注意红色加粗部分。

<bean id="roleQuery" class="com.cts.pip.ws.RoleQuery" />

<wss:binding url="/roleQueryService">

<wss:service>

<ws:service bean="#roleQuery" />

</wss:service>

</wss:binding>

ü 上面的描述,使得我们的Spring容器根据JAVA类: com.cts.pip.ws.RoleQuery生成相应的wsdl。

ü 这边的: wss:binding url映射的是我们的web.xml中映射的相应的servleturl。

来看我们的web.xml中如何去映射我们的servleturl的:

<servlet>

<servlet-name>jaxws-servlet</servlet-name>

<servlet-class>com.sun.xml.ws.transport.http.servlet.WSSpringServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>jaxws-servlet</servlet-name>

<url-pattern>/roleQueryService</url-pattern>

</servlet-mapping>

3. 们的webservice

package com.cts.pip.ws;

import javax.annotation.Resource;

import javax.jws.WebMethod;

import javax.jws.WebService;

import org.apache.log4j.Logger;

import com.cts.pip.dto.*;

import java.util.*;

import com.cts.pip.service.*;

@WebService

public class RoleQuery {

protected Logger log = Logger.getLogger(this.getClass());

@Resource

RoleService roleService;

 

@WebMethod

public List<RoleDTO> getRoles(){

List<RoleDTO> roleList=new ArrayList<RoleDTO>();

try{

roleList=roleService.queryRole();

log.info("roleList Size====="+roleList.size());

return roleList;

}catch(Exception e){

log.error(e);

return null;

}

}

}

可以看到,我们的这个类,可以直接annotation进一个由spring容器管理的service层,层我们的webservice可以集成spring,调用springcontext中管理的任何资源,相信这个实用阶值会比较大吧,对吧?呵呵。

 

4. 们的webservice成wsdl与生成相关的服务类

 

 

(如何编译参考5天学会jaxws-webservice教程第一天)。

 

把这个web应用发布到tomcat中去,启动tomcat。

输入:http://localhost:8080/backendmanagement/roleQueryService?wsdl

我们可以得到wsdl的输出。

打开soapui,生成一个soap测试客户端:

 

测试一下我们的soap测试客户端:

 

可以看到右边我们得到了3条输出,这就是webservice通过spring的service,spring的service通过hibernate的dao获得到数据的soap包。代表我们的webservice服备端已经发布成功。

5. 开发客户端

这边如何编译,如何引用wsdl生成客户端所需要的stub一并滤过,详细请参见:5天学会jaxws-webservice教程第一天中相关的内容,下面只给出实现的客户端,在这边我们使用的polling方式的webservice客户端。

 

package com.cts.pip.ws;

import javax.xml.ws.*;

import java.util.*;

import com.cts.pip.ws.*;

import ctsjavacoe.ws.fromjava.CollectionWS;

import ctsjavacoe.ws.fromjava.RtnMethodResponse;

 

public class JAXWSSPRINGPollingClient {

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

RoleQueryService service = new RoleQueryService();

RoleQuery port = service.getRoleQueryPort();

Response<GetRolesResponse> getRoleAsync = port.getRolesAsync();

while (!getRoleAsync.isDone()) {

System.out.println("is not done");

}

List<RoleDTO> rtnList = new ArrayList<RoleDTO>();

try {

GetRolesResponse getRolesResponse = getRoleAsync.get();

rtnList = getRolesResponse.getReturn();

System.out.println("return size======" + rtnList.size());

for (RoleDTO r : rtnList) {

System.out.println(r.getRoleId() + " " + r.getRoleName());

}

} catch (Exception ex) {

ex.printStackTrace();

}

}

}

 



分享到:
评论

相关推荐

    jax-ws实现webservice调用

    **Java API for XML Web Services (JAX-WS)** 是一种由Java SE和Java EE平台支持的用于构建Web服务的标准API。它使得开发人员能够轻松地创建、部署和使用基于SOAP(简单对象访问协议)的Web服务。在本教程中,我们将...

    webservice之jax-ws

    【标题】:Web服务之Java API for XML Web Services (JAX-WS) 【内容详解】 JAX-WS,全称为Java API for XML Web Services,是Java平台上的一个标准,用于构建和部署基于SOAP(Simple Object Access Protocol)的...

    jax-ws api jar包

    这个jar文件是开发基于JAX-WS的Web服务所必需的依赖之一。以下是关于JAX-WS的一些核心知识点: 1. **服务端开发:** - **@WebService**:这是JAX-WS中的一个关键注解,用于标记一个Java类作为Web服务的接口。它...

    jax-ws WebService客户端与服务端工程.rar

    - JAX-WS支持安全特性,如WS-Security(Web Services Security),可以添加数字签名和加密以确保数据的安全传输。 7. **性能优化**: - 缓存WSDL:客户端可以缓存WSDL,减少网络请求。 - MTOM(Message ...

    JAX-WS开发webservice示例详解

    - 安全性:利用WS-Security等规范,可以实现Web服务的身份验证和加密。 **5. 总结** 通过JAX-WS,开发者可以方便地构建和消费SOAP Web服务。MyEclipse等IDE提供了友好的集成环境,简化了整个过程。在实际项目中,...

    metro-jax-ws-jaxws221x.zip

    【标题】"metro-jax-ws-jaxws221x.zip" 提供的是一个关于JAX-WS(Java API for XML Web Services)的开发示例,其中包含了JAX-WS 2.2.1版本的相关组件和库文件。这个压缩包是针对Java开发者设计的,用于帮助他们理解...

    jax-ws2.1.zip

    **标题:“jax-ws2.1.zip”**指的是一个包含Java API for XML Web Services(JAX-WS)2.1版本的压缩包。JAX-WS是Java平台标准版(Java SE)和企业版(Java EE)的一部分,用于构建基于SOAP(Simple Object Access ...

    Jax-ws RI.zip

    WS-Security用于安全的Web服务通信;以及WS-ReliableMessaging和WS-Addressing等,增强了消息传递的可靠性和寻址能力。 总的来说,"Jax-ws RI.zip"是一个关键组件,用于在Tomcat环境中搭建和运行基于JAX-WS的Web...

    JAX-WS使用教程(内含jar包)

    4. **安全性**:JAX-WS提供了一套完整的安全模型,包括基本认证、TLS加密、WS-Security等,保障Web服务的安全性。 **总结** JAX-WS是Java开发者构建Web服务的重要工具,其简单易用的API和强大的功能使得创建和消费...

    JAX-WS低版本

    **描述分析:** 描述提到“tomcat+webservice实现简单的web服务远程调用接口,所需的jar”,这暗示了在Apache Tomcat服务器上,我们将会使用JAX-WS来构建一个可以通过网络调用的Web服务接口。"所需的jar"是指为了...

    学习JAX-WSWebService开发

    此外,JAX-WS还提供了多种高级特性,如MTOM(Message Transmission Optimization Mechanism)用于优化二进制数据传输,以及WS-Security用于实现Web服务的安全性。在实际开发中,了解这些特性将有助于提高Web服务的...

    JAX-WS开发部署WebService

    【JAX-WS开发部署WebService】是Web服务开发的一个重要主题,主要涉及到使用Java API for XML Web Services(JAX-WS)创建和部署基于SOAP的Web服务。JAX-WS是一种标准的、Java平台上的API,它使得开发人员能够轻松地...

    jax-ws实践教程代码helloWS.zip jax-ws实践教程代码helloWS.zip

    JAX-WS还支持各种高级特性,如WS-Security(安全)、WS-ReliableMessaging(可靠消息传递)和WS-Policy(策略),这些都是构建复杂、安全的Web服务时的关键部分。 10. **学习资源** 对于初学者,这个"helloWS...

    Web Service学习小结——基于JDK自带JAX-WS实现的web service

    - 考虑到Web服务的安全性,JAX-WS支持WS-Security标准,可以实现消息认证、加密和签名。 8. **测试**: - 使用工具如`wsimport`生成客户端代码后,可以编写测试用例来验证服务的正确性。 9. **ws_1文件**: - ...

    JAX-WS之旅(一)

    **JAX-WS之旅(一)** 在Java世界中,Web服务是应用程序之间进行通信的重要方式,而JAX-WS(Java API for XML Web Services)是Java平台的标准接口,用于创建和消费SOAP(Simple Object Access Protocol)Web服务。...

    JAX-WS之旅(二)

    在JAX-WS之旅的第二部分中,我们将深入探讨这个Java API for XML Web Services的核心概念和技术细节。JAX-WS是Java平台上的一个标准,用于创建和消费Web服务,它使得开发人员能够轻松地实现基于SOAP的Web服务。在这...

    JAX-WS2.0规范

    ### JAX-WS 2.0 规范详解 #### 一、概述 JAX-WS(Java API for XML Web Services)2.0 是一种用于创建和...对于那些希望利用 Java 技术栈开发高质量 Web 服务的应用程序而言,JAX-WS 2.0 绝对是首选解决方案之一。

    JAX-WS Five Minute Tutorial 源码

    2. **消息级安全**:JAX-WS支持WS-Security,可以对消息进行加密、签名等安全操作。 3. **MTOM与SwA**:JAX-WS支持MTOM(Message Transmission Optimization Mechanism)和SwA(SwaReference)技术,用于优化大型...

    JAX-WS(java api xml webservice)

    在【压缩包子文件的文件名称列表】中提到的"webservice_002_JAX-WS_client"可能是一个示例或教程,涵盖了如何使用JAX-WS创建和使用Web服务客户端。这可能包括以下步骤: 1. **定义SEI**: 编写服务接口,标记为`@...

Global site tag (gtag.js) - Google Analytics