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

cxf文件上传带令牌验证

    博客分类:
  • Java
阅读更多

webService项目

FileEntity.java

 

package com.yunix.service.entity;

import javax.activation.DataHandler;

/**
 * 文件实体类
 * @author yunix
 * 2013-3-2 上午11:19:22
 */
public class FileEntity {

	private String fileName;
	private String fileType;
	private DataHandler file;
	
	public String getFileName() {
		return fileName;
	}
	public void setFileName(String fileName) {
		this.fileName = fileName;
	}
	public String getFileType() {
		return fileType;
	}
	public void setFileType(String fileType) {
		this.fileType = fileType;
	}
	public DataHandler getFile() {
		return file;
	}
	public void setFile(DataHandler file) {
		this.file = file;
	}
	
}

 IFileService.java

 

 

package com.yunix.service.webservice;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.xml.ws.soap.MTOM;

import com.yunix.service.entity.FileEntity;

/**
 * 文件service接口
 * @author yunix
 * 2013-3-2 上午11:22:22
 */
@WebService
@MTOM
public interface IFileService {

	@WebMethod
	public void uploadFile(@WebParam(name="fileEntity")FileEntity fileEntity);
}

 FileService

 

 

package com.yunix.service.webservice;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import javax.activation.DataHandler;

import com.yunix.service.entity.FileEntity;

/**
 * 文件Service实现
 * @author yunix
 * 2013-3-2 上午11:24:57
 */
public class FileService implements IFileService {

	@Override
	public void uploadFile(FileEntity fileEntity) {
		System.out.println("1");
		DataHandler handler = fileEntity.getFile();
		System.out.println("2");
		try {
			InputStream is = handler.getInputStream();
			OutputStream os = new FileOutputStream(new File("F:/"+fileEntity.getFileName()+"."+fileEntity.getFileType()));
			byte[] b = new byte[100000];
			int bytesRead = 0;
			while((bytesRead = is.read(b)) != -1){
				os.write(b, 0,bytesRead);
			}
			System.out.println("3");
			os.flush();
			os.close();
			is.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

 WsAuthHandler.java

 

 

package com.yunix.service.auth;

import java.io.IOException;

import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.UnsupportedCallbackException;
import javax.xml.soap.SOAPException;

import org.apache.cxf.interceptor.Fault;
import org.apache.ws.security.WSPasswordCallback;

/**
 * 密码回调处理类
 * @author yunix
 * 2013-3-4 上午10:59:30
 */

public class WsAuthHandler implements CallbackHandler {

	@Override
	public void handle(Callback[] callbacks) throws IOException,
			UnsupportedCallbackException {
		WSPasswordCallback pc = (WSPasswordCallback)callbacks[0];
		
		if (!"file_client".equals(pc.getIdentifier())) {
			SOAPException soapExc = new SOAPException("");
			throw new Fault(soapExc);
		}
		
		int usage = pc.getUsage();
		if (usage == WSPasswordCallback.USERNAME_TOKEN) {
			pc.setPassword("123456");
		}
	}

}

 cxf-servlet.xml

 

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:jaxws="http://cxf.apache.org/jaxws"
	xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">

	<import resource="classpath:META-INF/cxf/cxf.xml" />
	<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
	<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />

	<bean id="loggingInInterceptor" class="org.apache.cxf.interceptor.LoggingInInterceptor" />
	<bean id="wss4jInInterceptor" class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor">
		<constructor-arg>
			<map>
				<entry key="action" value="UsernameToken" />
				<entry key="passwordType" value="PasswordText" />
				<entry key="user" value="admin"/>
				<entry key="passwordCallbackClass" value="com.yunix.service.auth.WsAuthHandler" />
			</map>
		</constructor-arg>
	</bean>
		
	<jaxws:endpoint id="file" implementor="com.yunix.service.webservice.FileService" address="/fileService">
		<jaxws:inInterceptors>
			<ref bean="loggingInInterceptor"/>
			<ref bean="wss4jInInterceptor"/>
		</jaxws:inInterceptors>
	</jaxws:endpoint>
	  
</beans>

 web.xml

 

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
         http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <display-name>cxf</display-name>
	<description>Apache CXF Endpoint</description>
	<listener>           
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	<context-param>
    	<param-name>contextConfigLocation</param-name>
    	<param-value>classpath*:cxf-servlet.xml</param-value>
  	</context-param>
    <servlet>
        <servlet-name>cxf</servlet-name>
        <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>cxf</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>

 =================================

 

webservice完成

 

下面是测试项目

 

 

 

package com.yunix.service.auth;

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 yunix
 * 2013-3-4 上午10:59:30
 */

public class WsClientAuthHandler implements CallbackHandler {

	@Override
	public void handle(Callback[] callbacks) throws IOException,
			UnsupportedCallbackException {
		WSPasswordCallback pc = (WSPasswordCallback)callbacks[0];
		pc.setIdentifier("file_client");
		pc.setPassword("123456");
	}

}

 拷贝FileEntity.java、IFileService.java到客户端项目

xml配置文件如下:

<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />

 

<bean id="wss4JOutInterceptor" class="org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor">
		<constructor-arg>
			<map>
				<entry key="action" value="UsernameToken" />
				<entry key="passwordType" value="PasswordText" />
				<entry key="user" value="admin" />
				<entry key="passwordCallbackClass"
					value="com.yunix.service.auth.WsClientAuthHandler" />
			</map>
		</constructor-arg>
	</bean>
	<jaxws:client id="ws-file"
		address="http://localhost:8080/service-file/fileService"
		serviceClass="com.yunix.service.webservice.IFileService">
		<jaxws:outInterceptors>
			<ref bean="wss4JOutInterceptor" />
		</jaxws:outInterceptors>
	</jaxws:client>

 

测试代码

package com;

import java.io.File;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;

import org.junit.Test;
import org.unitils.UnitilsJUnit4;
import org.unitils.spring.annotation.SpringApplicationContext;
import org.unitils.spring.annotation.SpringBeanByType;

import com.yunix.service.entity.FileEntity;
import com.yunix.service.webservice.IFileService;

/**
 * 类说明
 * @author yunix
 * 2013-3-4 下午01:13:49
 */
@SpringApplicationContext("spring.xml")
public class FileServiceTest extends UnitilsJUnit4 {
	
	@SpringBeanByType
	private IFileService fileService;
	
	@Test
	public void testFile(){
		 
        FileEntity file = new FileEntity();  
        file.setFileName("2012-03-04TestFile");
        file.setFileType("jpg");  
        DataSource source = new FileDataSource(new File("d:\\123456.jpg"));  
        file.setFile(new DataHandler(source));     
        
        fileService.uploadFile(file);
        System.out.println("success");
	}

}

 

 

 

分享到:
评论

相关推荐

    基于spring+cxf实现用户文件传输的webservice

    基于spring+cxf实现用户文件传输的webservice 在本文中,我们将探讨如何使用Spring+CXF实现用户文件传输的Webservice。该Webservice提供了基本的报文上传和查询功能,同时还提供了用户身份验证功能。 Spring 和 ...

    springboot cxf下载上传

    springboot cxf下载上传springboot cxf下载上传springboot cxf下载上传springboot cxf下载上传springboot cxf下载上传springboot cxf下载上传springboot cxf下载上传springboot cxf下载上传springboot cxf下载上传...

    CXF实现SSL安全验证

    ### CXF实现SSL安全验证 在现代网络应用中,安全通信是至关重要的。Apache CXF 是一个开源项目,提供了一套强大的工具和服务框架,用于构建和开发基于标准的服务(如 Web Services)。本文将详细介绍如何使用 CXF ...

    CXF 通过用户名和密码进行验证

    - **Spring XML配置**:在Spring配置文件中定义CXF客户端和服务端的安全策略,例如使用`&lt;cxf:bus&gt;`和`&lt;cxf:properties&gt;`元素。 - **WSDL-first方式**:在WSDL文件中定义安全策略,CXF会自动读取并应用这些策略。 *...

    使用cxf的webservice安全验证

    例如,WS-SecurityPolicy定义了服务端和客户端之间的安全约束,而WS-Trust则处理安全令牌的请求和验证。在CXF中,可以通过XML配置或编程方式来配置这些策略。 4. **OAuth**:适用于分布式环境,允许第三方应用代表...

    Cxf客户端及服务器端,实现客户端和服务器端的权限验证

    在本文中,我们将深入探讨如何在Apache CXF框架中实现客户端和服务器端的权限验证。Apache CXF是一个开源的Java框架,主要用于构建和开发服务导向架构(SOA)和服务级应用程序。它支持多种Web服务标准,包括SOAP、...

    Cxf转换器示例

    【Cxf转换器示例】是一个关于Web服务技术的实践项目,主要聚焦于Apache CXF框架中的转换器(Converter)功能。Apache CXF是一个开源的Java框架,它用于构建和开发服务导向架构(SOA)和RESTful应用程序。CXF不仅支持...

    CXF之二(上传及下载附件)

    本篇文章将深入探讨如何使用CXF实现文件的上传和下载功能,这对于任何涉及文件交互的应用程序都是至关重要的。 在CXF中,实现文件上传通常涉及到创建一个Web服务接口,该接口接受Multipart请求,这允许用户发送多个...

    cxf webservice 文件分块上传

    【标题】:“CXF Webservice 文件分块上传” 在IT领域,CXF是一个广泛使用的开源框架,用于构建和部署Web服务。它支持多种Web服务规范,包括SOAP、RESTful等。"文件分块上传"是一种处理大文件的技术,通常用于优化...

    CXF服务端对象文件支持断点传送

    在提供的压缩包文件中,"cxfclientexample"可能是CXF客户端的一个示例项目,用于演示如何使用CXF进行文件的断点上传和下载。这个示例可能包括了配置文件、源代码以及必要的测试用例,帮助开发者理解如何在实际应用中...

    CXF3.0+Spring3.2 传输文件

    例如,你可以创建一个`@WebService`注解的服务接口,然后实现该接口以处理文件上传和下载的业务逻辑。 2. **设置数据传输**:文件通常是通过HTTP或HTTPS协议传输的,因此你需要在服务方法中使用`javax.activation....

    CXF 文件记录报文日志,非控制台打印。

    本文将深入探讨如何在CXF中实现文件记录报文日志,而非仅仅在控制台打印。 首先,理解CXF的日志系统。CXF使用Java的日志抽象层,如Log4j、Java Util Logging (JUL) 或者 Commons Logging。这意味着你可以选择任意一...

    cxf 安全验证例子

    【标题】"CXF安全验证例子"涉及到的是Apache CXF框架在实现Web服务时的安全验证机制。Apache CXF是一个开源的Java框架,用于构建和部署Web服务。它提供了丰富的功能,包括SOAP、RESTful API、WS-*规范支持以及安全...

    cxf所需JAR包和xsd文件

    此外,XSD文件还可以用于验证XML消息,确保其符合预先定义的模式。 3. **Spring整合CXF**: Spring框架是企业级Java应用的首选,而CXF的Spring整合使得两者可以无缝配合。通过Spring,开发者可以使用声明式的方式...

    验证客户端源码cxf

    **标题:“验证客户端源码CXF”** **正文:** CXF(Camel XFire)是一个开源服务框架,它允许开发人员创建和部署基于Java API for Web Services (JAX-WS) 和Java API for RESTful Web Services (JAX-RS) 的Web服务...

    CXF框架约束文件

    CXF框架约束文件,用于导入catelog,CXF是apache旗下的开源框架,由Celtix + XFire这两门经典的框架合成,是一套非常流行的web service框架。

    Springboot整合CXF发布Web service和客户端调用(用户和密码验证)

    CXF提供了`wsdl2java`工具,可以基于Web服务的WSDL文件生成客户端代码。你可以使用Maven的CXF插件或者命令行工具来执行此操作。 生成客户端代码后,你可以在Spring Boot客户端应用中引入这些生成的类,并使用它们来...

    Apache CXF文件目录结构及需要jar包

    - 验证文件类型:只允许特定类型的文件上传,以防止恶意文件。 - 限制文件大小:设置上传文件的最大尺寸,防止消耗过多服务器资源。 - 异步处理:使用异步处理大文件上传,避免阻塞服务器线程。 - 安全存储:确保...

    cxf客户端(对象,上传与下载文件支持断点传输)

    【标题】:“CXF客户端:对象参数,文件上传下载及断点续传功能” 在Java Web开发中,CXF框架广泛用于实现Web服务,包括SOAP和RESTful接口。本示例着重于CXF客户端如何处理对象参数传递以及支持文件的上传和下载,...

Global site tag (gtag.js) - Google Analytics