`
longgangbai
  • 浏览: 7338912 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

CXF应用程序开发应用程序的安全性

阅读更多
package com.easyway.cxf.service;

import javax.jws.WebParam;
import javax.jws.WebService;
import java.util.List;


import com.easyway.cxf.model.User;
/**
 * 
 * 采用JaxWS发布服务
 * 备注在接口中必须使用@WebService 注解否则出现错误
 * 
 * 
 * @author longgangbai
 *
 */
@WebService
public interface HelloService {
 /**
  * The @WebParam annotation is necessary as java interfaces do not store the Parameter name in the .class file. So if you leave out the annotation your parameter will be named arg0.
  * @param name
  * @return
  */
  public String hello(@WebParam(name="text")String name);
  
  /**
   * Advanced usecase of passing an Interface in.  JAX-WS/JAXB does not
   * support interfaces directly.  Special XmlAdapter classes need to
   * be written to handle them
   */
  public String sayHi(User user);

  public String[] getAllUseNames(List<User> userList);
}

 

package com.easyway.cxf.service;

import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import javax.jws.WebService;

import com.easyway.cxf.model.User;
/**
 * 
 *  采用JaxWS发布服务
 *  
 * JAX-WS includes many more annotations as well such as:
 *
 * @WebMethod - allows you to customize the operation name, exclude the operation from inclusion in the service, etc 
 * @WebParam - allows you to customize a parameter's name, namespace, direction (IN or OUT), etc 
 * @WebResult - allows you to customize the return value of the web service call 
 *
 * @author longgangbai
 *
 */
@WebService(endpointInterface = "com.easyway.cxf.service.HelloService",
        serviceName = "HelloService")
public class HelloServiceImpl implements HelloService {

    Map<Integer, User> users = new LinkedHashMap<Integer, User>();
    

	public String hello(String username) {
        return "Hello " + username;
	}

	public String sayHi(User user) {
	        users.put(users.size() + 1, user);
	        return "Hello "  + user.getUsername();
	}
	public String[] getAllUseNames(List<User> userList) {
		String[] userListArr=new String[userList.size()];
		for (int i=0;i<userList.size();i++) {
			userListArr[i]=userList.get(i).getUsername();
		}
		return userListArr;
	}

}

package com.easyway.cxf.security;

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;
/**
 * 采用回调方法检测WS调用的安全性
 * @author longgangbai
 *
 */
public class ServerPasswordHandler implements CallbackHandler{

	private Map<String, String> passwords;   
	
	public ServerPasswordHandler(){
		passwords=new HashMap<String, String>();
    	passwords.put("admin", "admin");   
        passwords.put("test", "test");   
        passwords.put("userName", "password"); 
	}
	
	public void handle(Callback[] callbacks) throws IOException,
			UnsupportedCallbackException {
		 WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];  
		 //获取用户名
		 String id = pc.getIdentifier(); 
		 System.out.println("id==="+id);
		 //获取密码
		 String password = pc.getPassword();  
	     if(passwords.containsKey(id)){
	    	 if(!password.equals(passwords.get(id))){
	    		 throw new SecurityException("wrong password");
	    	 }
	     }else{
	    	 throw new SecurityException("wrong username");
	     }
	}
}

 

package com.easyway.cxf.security;

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;
/**
 * 客户端的验证校验代码
 * @author longgangbai
 *
 */
public class ClientPasswordCallback implements CallbackHandler { 

		public void handle(Callback[] callbacks) throws IOException,
				UnsupportedCallbackException {
	            WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];    
	            int usage = pc.getUsage();    
	            System.out.println("identifier: " + pc.getIdentifier());    
	            System.out.println("usage: " + pc.getUsage());    
	            if (usage == WSPasswordCallback.USERNAME_TOKEN) {  
	            	System.out.println("admin =====");
	                    pc.setPassword("admin");   
	                    pc.setIdentifier("admin");
	            } 
		}    

	}

 

package com.easyway.cxf.test.client.security;

import java.util.HashMap;
import java.util.Map;

import org.apache.cxf.binding.soap.saaj.SAAJOutInterceptor;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor;
import org.apache.ws.security.WSConstants;
import org.apache.ws.security.handler.WSHandlerConstants;

import com.easyway.cxf.security.ClientPasswordCallback;
import com.easyway.cxf.service.HelloService;
import com.easyway.cxf.test.server.CFX;
/**
 * 
 * @author longgangbai
 *
 */
public class CXFClientSecurity {
public static void main(String[] args) {
	JaxWsProxyFactoryBean factory=new JaxWsProxyFactoryBean();
	Map<String, Object> outProps = new HashMap<String, Object>(); 
	outProps.put(WSHandlerConstants.ACTION,WSHandlerConstants.USERNAME_TOKEN); 
	outProps.put(WSHandlerConstants.USER, "userName"); 
	outProps.put(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_TEXT); 
	outProps.put(WSHandlerConstants.PW_CALLBACK_CLASS, 
	ClientPasswordCallback.class.getName()); 
	WSS4JOutInterceptor wssOut = new WSS4JOutInterceptor(outProps); 
	factory.getOutInterceptors().add(wssOut); 
	factory.getOutInterceptors().add(new SAAJOutInterceptor()); 
	factory.setServiceClass(HelloService.class);
	//和服务端发送路径一样的
	factory.setAddress(CFX.SERVICE_ADDRESS);
	HelloService helloService=(HelloService)factory.create();
	String msg=helloService.hello("xiaobai");
	System.out.println("msg="+msg);
}
}

 

package com.easyway.cxf.test.client.security;

import java.util.HashMap;
import java.util.Map;

import org.apache.cxf.binding.soap.saaj.SAAJOutInterceptor;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor;
import org.apache.ws.security.WSConstants;
import org.apache.ws.security.handler.WSHandlerConstants;

import com.easyway.cxf.security.ClientPasswordCallback;
import com.easyway.cxf.service.HelloService;
import com.easyway.cxf.test.server.CFX;
/**
 * 
 * @author longgangbai
 *
 */
public class CXFClientSecurity {
public static void main(String[] args) {
	JaxWsProxyFactoryBean factory=new JaxWsProxyFactoryBean();
	Map<String, Object> outProps = new HashMap<String, Object>(); 
	outProps.put(WSHandlerConstants.ACTION,WSHandlerConstants.USERNAME_TOKEN); 
	outProps.put(WSHandlerConstants.USER, "userName"); 
	outProps.put(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_TEXT); 
	outProps.put(WSHandlerConstants.PW_CALLBACK_CLASS, 
	ClientPasswordCallback.class.getName()); 
	WSS4JOutInterceptor wssOut = new WSS4JOutInterceptor(outProps); 
	factory.getOutInterceptors().add(wssOut); 
	factory.getOutInterceptors().add(new SAAJOutInterceptor()); 
	factory.setServiceClass(HelloService.class);
	//和服务端发送路径一样的
	factory.setAddress(CFX.SERVICE_ADDRESS);
	HelloService helloService=(HelloService)factory.create();
	String msg=helloService.hello("xiaobai");
	System.out.println("msg="+msg);
}
}

 

分享到:
评论
4 楼 phane 2012-03-06  
3 楼 haijiaotiger 2011-02-25  
是可以跑的。细心一些就好了。
2 楼 longgangbai 2010-05-24  
axiang_2898 写道
你所打的包都跑不起来的。



先运行服务端的main方法,在再运行客户端main方法,没有问题哦
1 楼 axiang_2898 2010-05-24  
你所打的包都跑不起来的。

相关推荐

    Cxf应用全部jar包

    这些jar包是CXF运行的基础,它们提供了诸如WS-I兼容性、WSDL处理、数据绑定、安全性和消息传递等功能。同时,"以及cxf整合spring的实例"表明这个资源还包含了如何将CXF与Spring框架集成的示例代码。Spring是一个流行...

    CXF服务端程序

    【CXF服务端程序】是基于Apache CXF框架构建的一...在实际开发过程中,除了编写服务接口和实现,我们还需要关注服务的安全性、性能优化以及与其他系统的集成等方面。对于部署,熟悉Servlet容器的配置和管理也是必要的。

    cxf+spring开发webservice客户端与服务端实例

    在IT行业中,Web服务是应用程序之间进行通信的一种标准方法,而CXF和Spring框架的结合则为开发高质量的Web服务提供了强大的支持。本实例将详细阐述如何利用CXF和Spring来构建Web服务的客户端和服务端。 一、CXF简介...

    cxf服务端开发jar包

    11. 安全机制:CXF支持多种安全机制,包括基本认证、WS-Security(如用户名令牌、X.509证书)、OAuth等,确保服务的安全性。 八、性能优化 12. 缓存和性能:CXF提供了缓存机制,可以缓存WSDL和XSD,提高服务的响应...

    cxf开发webservice所用jar包

    这个标题“cxf开发webservice所用jar包”表明我们正在讨论一组CXF框架所需的JAR文件,这些文件对于利用CXF开发基于Web服务的应用程序至关重要。在描述中提到“cxf-2.4.1整合spring3.0所用jar包”,这暗示了我们使用...

    apache cxf 开发包 1

    Apache CXF 是一个开源的Java框架,主要用于构建和开发服务导向架构(Service-Oriented Architecture, SOA)和Representational State Transfer(RESTful)应用程序。它提供了多种方式来实现Web服务,包括Java API ...

    使用cxf和spring开发基于https的webservice服务端以及客户端样例

    在IT行业中,Web服务是一种广泛使用的通信协议,用于应用程序之间的数据交换。本示例将详细介绍如何使用Apache CXF和Spring框架来开发基于HTTPS的安全Web服务,包括服务端和客户端的实现。 Apache CXF是一个开源的...

    cxf开发工具包

    REST(Representational State Transfer)是一种网络应用程序的设计风格和开发方式,基于HTTP协议,用于简化分布式系统之间的交互。CXF提供了一套强大的工具,支持开发RESTful服务,包括注解驱动的API(如JAX-RS)和...

    apache-cxf-2.2.6.zip webservice cxf开发利器完整开发包

    6. **传输和协议**:CXF支持多种传输协议,包括HTTP、HTTPS、JMS、FTP等,同时也支持各种WS-*协议,如WS-Security、WS-Addressing等,确保Web服务的安全性和可扩展性。 7. **开发工具**:CXF提供了CXF-Tools,这是...

    cxf server demo简单程序例子

    【标题】:“CXF服务器端演示程序实例” 在Java开发中,Apache CXF是一个广泛使用的开源...在实践中,你可能会遇到如异常处理、安全性配置、性能优化等更多复杂的主题,这些都是在掌握基础之后需要逐步学习和掌握的。

    cxf 开发restful服务

    【正文】 在IT行业中,开发RESTful服务是构建现代Web应用程序的关键部分,它提供了一种轻量级、灵活且...在实际开发中,你还可以利用CXF提供的高级特性,如拦截器、安全性、数据绑定等,来扩展和优化你的REST服务。

    非常详细的cxf开发学习教程集合

    CXF(CXF: Composite eXtensible Framework)是一个开源的Java框架,它主要用于构建和服务导向架构(SOA)的应用程序。本教程集合是为初学者精心准备的,旨在帮助你全面了解并掌握CXF的开发技能。让我们逐一探讨这些...

    SSM+CXF进行接口开发实现跨域跨平台

    **Spring框架**:Spring是一个全面的Java企业级应用开发框架,提供了依赖注入(DI)和面向切面编程(AOP)等核心特性,使得应用程序的开发更为简洁、模块化。在SSM中,Spring作为基础架构层,负责管理对象生命周期和整个...

    WebService开发客户端 cxf方式

    2. **安全性**:CXF提供多种安全机制,如SSL/TLS加密、WS-Security(Web Services Security)支持,可以实现身份验证、消息完整性及保密性。 3. **拦截器和插件**:CXF允许自定义拦截器和插件,扩展服务行为,如...

    使用cxf 开发webService 初体验

    3. **强大的扩展性**:CXF可以通过插件机制添加自定义功能,如安全性和数据绑定。 **八、源码分析** 对于源码级别的理解,可以查看CXF项目的源代码,理解其内部的工作原理,如服务的生命周期管理、消息处理和协议...

    WebService之CXF开发指南.rar

    CXF,全称Apache CXF,是一个开源的Java框架,用于构建和开发高质量、面向服务的应用程序。CXF不仅支持SOAP,还支持RESTful服务,使其成为企业级开发的强大工具。本指南将深入探讨CXF的使用,帮助开发者理解和掌握其...

    基于Soap协议下CXF框架开发Webservice

    在IT行业中,Web服务是一种允许不同应用程序之间进行通信的关键技术。SOAP(Simple Object Access Protocol)是一种基于XML的协议,用于交换结构化的、机器可读的数据。CXF框架是Apache组织提供的一款开源工具,它...

    apahe cxf 与spring 开发例子1

    Apache CXF 主要用于构建服务导向架构(SOA)中的Web服务,而Spring则是一个强大的应用程序框架和依赖注入容器。当这两个框架结合使用时,可以创建高效、灵活且易于维护的服务。 **Apache CXF简介** Apache CXF 是...

    cxf和springnvc整合

    另一方面,Spring 框架是 Java 应用程序开发的核心组成部分,提供了依赖注入、面向切面编程等功能。将 CXF 与 Spring 集成,可以充分利用两者的优势,创建高效、灵活的服务。 首先,为了在 Spring 应用程序中使用 ...

    apahe cxf 开发所需的 开发包3

    在"apache cxf 开发所需的 开发包3"中,我们可以预想这个压缩包包含的是CXF开发的第三个部分,可能包括一些特定的库文件和组件,这些是构建和运行CXF应用程序所必需的。这部分可能包含以下关键组件: 1. **CXF JAX-...

Global site tag (gtag.js) - Google Analytics