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

WebService之XFire和Jax实现身份验证

 
阅读更多

只列出部分核心代码, 其它代码都是myeclipse生成, 详见附件.

 

1.服务器代码:

HelloWorld.java代码:

 

 

package test;

public class HelloWorld implements IHelloWorld {

	public Float add(float a, float b) {
		return a + b;
	}

	public String sayHello(String name) {
		return "hello, " + name + "...";
	}

}

 IHelloWorld.java代码:

 

package test;

import java.rmi.Remote;

public interface IHelloWorld extends Remote{
	
	public String sayHello(String name);
	
	public Float add(float a, float b);
}

 ServerHandler.java代码:

 

package test;

import org.codehaus.xfire.MessageContext;
import org.codehaus.xfire.XFireRuntimeException;
import org.codehaus.xfire.handler.AbstractHandler;
import org.jdom.Element;

public class ServerHandler extends AbstractHandler {
	public void invoke(MessageContext message) throws Exception {
		Element header = message.getInMessage().getHeader();
		if (header == null) {
			throw new XFireRuntimeException("Missing SOAP header...");
		}
		Element element = header.getChild("AuthenticationToken");
		String userName = element.getChild("userName").getValue();
		String password = element.getChild("password").getValue();
		System.out.println("userName:" + userName + ",password" + password);
		if ("wander".equals(userName) && "wander".equals(password)) {
			System.out.println("yes, you passed...");
		} else {
			throw new XFireRuntimeException("error password and username...");
		}
	}

}

 services.xml内容:

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xfire.codehaus.org/config/1.0">

	<service>
		<name>HelloWorldSimple</name>
		<namespace>http://simple.xfire.webservice/HelloWorld</namespace>
		<serviceClass>test.IHelloWorld</serviceClass>
		<implementationClass>test.HelloWorld</implementationClass>
		<scope>request</scope>
		<inHandlers>
			<handler handlerClass="test.ServerHandler">
			</handler>
		</inHandlers>
	</service>
</beans>

 

2.XFire实现身份验证

ClientMain2.java代码:

 

package test;

import java.util.List;
import java.lang.reflect.Proxy;
import java.net.MalformedURLException;
import java.util.ArrayList;

import org.codehaus.xfire.MessageContext;
import org.codehaus.xfire.client.Client;
import org.codehaus.xfire.client.XFireProxy;
import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.handler.AbstractHandler;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;
import org.jdom.Element;

public class ClientMain2 
extends AbstractHandler{
	
	public static void main(String[] args) throws MalformedURLException {
		ClientMain2 
auth = new ClientMain2
();
		String url = "http://localhost:8080/msg/services/HelloWorldSimple";
		Service service = new ObjectServiceFactory().create(IHelloWorld.class);
		IHelloWorld helloWorld = (IHelloWorld) new XFireProxyFactory().create(service, url);
		
		XFireProxy xfireProxy = (XFireProxy) Proxy.getInvocationHandler(helloWorld);
		Client client = xfireProxy.getClient();
		client.addOutHandler(auth);
		
		System.out.println(helloWorld.sayHello("wander"));
	}

	public void invoke(MessageContext message) throws Exception {
		Element header = new Element("header");
		Element authentication = new Element("AuthenticationToken");
		
		Element userName = new Element("userName");
		userName.setText("wander");
		
		Element password = new Element("password");
		password.setText("wander");
		
		authentication.addContent(userName);
		authentication.addContent(password);
		header.addContent(authentication);
		message.getOutMessage().setHeader(header);
	}

}

 

3.Jax-ws 实现身份验证

ClientMain.java代码

 

import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;

import javax.xml.namespace.QName;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPFactory;
import javax.xml.soap.SOAPHeader;
import javax.xml.soap.SOAPMessage;
import javax.xml.ws.handler.Handler;
import javax.xml.ws.handler.HandlerResolver;
import javax.xml.ws.handler.MessageContext;
import javax.xml.ws.handler.PortInfo;
import javax.xml.ws.handler.soap.SOAPHandler;
import javax.xml.ws.handler.soap.SOAPMessageContext;

public class ClientMain {

	@SuppressWarnings("unchecked")
	public static void main(String[] args) {
		HelloWorldSimple simple = new HelloWorldSimple();

		simple.setHandlerResolver(new HandlerResolver() {
			public List<Handler> getHandlerChain(PortInfo portInfo) {
				List<Handler> list = new ArrayList<Handler>();
				list.add(new MySOAPHandler());
				return list;
			}
		});
		HelloWorldSimplePortType port = simple.getHelloWorldSimpleHttpPort();
		System.out.println(port.sayHello("cat1"));
	}
}

class MySOAPHandler implements SOAPHandler<SOAPMessageContext> {

	public Set<QName> getHeaders() {
		return null;
	}

	public void close(MessageContext context) {
	}

	public boolean handleFault(SOAPMessageContext context) {
		throw new UnsupportedOperationException("Not supported yet.");
	}

	public boolean handleMessage(SOAPMessageContext context) {
		Boolean outboundProperty = (Boolean) context
				.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
		if (outboundProperty.booleanValue()) {
			SOAPMessage message = context.getMessage();
			try {
				SOAPEnvelope envelope = message.getSOAPPart().getEnvelope();
				SOAPFactory factory = SOAPFactory.newInstance();
				SOAPElement authenticationToken = factory
						.createElement("AuthenticationToken");
				SOAPElement userName = factory.createElement("userName");
				userName.setValue("wander");
				SOAPElement password = factory.createElement("password");
				password.setValue("wander");
				authenticationToken.addChildElement(userName);
				authenticationToken.addChildElement(password);
				
				SOAPHeader header = envelope.addHeader();
				header.addChildElement(authenticationToken);
				
			} catch (SOAPException e) {
				e.printStackTrace();
			}
		}
		return true;
	}
}
  • 大小: 119 KB
分享到:
评论

相关推荐

    eclipse开发webservice的xfire插件

    在编码阶段,XFire支持注解驱动的开发模式,这意味着你可以使用如`@WebService`和`@WebMethod`等JAX-WS注解来标记你的服务类和方法。这种方式使得代码更清晰,减少了XML配置的复杂性。 在部署方面,XFire插件可以...

    Webservice使用xfire发布及客户端调用

    - 使用XFire,你可以通过添加特定的注解(如@WebService)来标记你的类和方法,这样它们就会被识别为Web服务的操作。 - 接下来,你需要创建一个XFire实例,并配置服务端点地址。你可以通过XML配置文件或程序化方式...

    使用xfire实现webservice实例

    你可以使用Java的JAX-RPC或JAX-WS规范来定义一个普通的Java接口,然后用XFire的注解来标记这个接口,使其成为Web服务接口。例如: ```java @WebService public interface HelloWorldService { @WebMethod String ...

    WebService框架XFire

    虽然XFire不直接提供全面的安全解决方案,但它支持基于SOAP消息的安全特性,如WS-Security(Web Services Security),可以集成其他安全框架来实现身份验证、授权和加密等功能。 9. **与CXF的关系**: 随着时间的...

    基于 xfire 的 webservice 项目

    在IT领域,WebService是一种通过网络进行通信的标准方式,允许不同系统之间交换数据和实现功能共享。XFire是Java平台上的一个开源库,它为创建和消费Web服务提供了一种简单、高效的方法。这个基于XFire的WebService...

    webservice xfire配置示例

    这通常是一个Java接口,使用JAX-WS注解(如`@WebService`、`@WebMethod`等)来声明服务和方法。例如: ```java import javax.jws.WebService; @WebService public interface HelloWorldService { @WebMethod ...

    webservice_xfire 学习手册

    Spring框架是Java领域内非常流行的开发框架之一,与Xfire结合使用可以进一步提升开发效率和灵活性。 - **引入Spring依赖**:在项目的pom.xml文件中添加Spring相关的依赖。 - **配置Spring容器**:通过Spring的配置...

    webService(xfire)

    - 客户端通常需要处理身份验证、错误处理和重试机制,以确保与服务端的稳定通信。 4. **服务端开发**: - `WebServiceServer`则涵盖了服务的实现,它接收来自客户端的SOAP请求,执行相应的业务逻辑,然后返回响应...

    webservice-xfire 开发用的JAR包

    6. **xfire-annotations.jar**:提供了基于注解的Web服务开发,通过在Java类和方法上添加特定的注解,可以轻松地声明Web服务接口和实现。 7. **xfire-i18n.jar**:处理国际化和本地化需求的模块,使得Web服务可以...

    XFire框架实现WebService(二)

    在本篇博客“XFire框架实现WebService(二)”中,我们将深入探讨如何使用XFire这一开源框架来构建和消费Web服务。XFire是Java平台上一个轻量级、高性能的Web服务实现,它允许开发者快速地将Java接口转换为SOAP Web...

    webservice采用xfire搭建的所有jar包

    XFire则提供了实现这些标准的工具和库。 2. **XFire架构**:XFire的架构包括几个关键组件,如服务模型、消息处理器、协议绑定和序列化机制。服务模型定义了服务接口,消息处理器处理SOAP消息,协议绑定负责将消息...

    简单的XFire WebService例子

    4. **强大的注解支持**:通过Java注解,开发者可以快速定义Web服务接口和实现。 5. **集成测试工具**:XFire提供了内置的测试框架,便于单元测试和集成测试。 【XFire的使用步骤】 1. **安装和配置**:首先,你...

    用XFire开发WebService+Spring注解

    【标题】"用XFire开发WebService+Spring注解"涉及的主要知识点是利用XFire框架创建Web服务,并结合Spring框架的注解进行服务的管理和集成。XFire是一个强大的Java Web Service实现,它允许开发者轻松地创建和消费...

    webservice xfire整合spring(webservice配置采用注解)例子

    它允许开发者在Spring配置中声明Web服务,通过注解来定义服务接口和实现,降低了配置文件的复杂性。 3. **注解配置Web服务**:在Spring中,我们可以使用`@WebService`、`@WebServiceRef`等注解来声明Web服务接口和...

    webservice-xfire相关(xfire&wsdl4j;&jaxrpc;&jdom;)

    它提供了一种直观的方式来定义服务接口和实现,然后自动将它们转换为Web服务。 2. **WSDL4J**: WSDL(Web Services Description Language)是一种XML格式,用于定义Web服务的接口、消息格式、操作和绑定。WSDL4J...

    webservice之xfire

    【标题】:“Web服务之XFire详解” 在IT行业中,Web服务是一种允许应用程序之间进行通信的标准方式...以上是对“Web服务之XFire”的详细解析,通过这些知识点,开发者可以更好地理解和应用XFire来构建和使用Web服务。

    xfire+spring+maven构建webservice服务器和客户端

    标题中的“xfire+spring+maven构建webservice服务器和客户端”揭示了本教程将围绕三个主要技术进行讨论:XFire、Spring和Maven。这三者都是Java开发中不可或缺的工具,尤其在构建Web服务方面。 XFire是早期的一个...

Global site tag (gtag.js) - Google Analytics