`
micropang
  • 浏览: 1419 次
  • 性别: Icon_minigender_1
  • 来自: 广西
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Xfire 验证,不想些文字,只想贴代码!~~

阅读更多
服务器端验证代码:
package com.shengshu.demo.xfire.authentication;

import org.apache.log4j.Logger;
import org.codehaus.xfire.MessageContext;
import org.codehaus.xfire.exchange.InMessage;
import org.codehaus.xfire.fault.XFireFault;
import org.codehaus.xfire.handler.AbstractHandler;
import org.jdom.Namespace;
import org.jdom.Element;

import com.shengshu.demo.xfire.bean.AuthenticationManagerService;

/**
 * 
 * Jul 4, 2009
 * 
 * @author PangShuqiang
 * @blog http://pangshuqiang.blog.163.com/
 * @Email pangshuqiang@163.com (or) pangsirsky@163.com
 * @QQ 127015919 (or) 285204808
 * @version 1.0
 *
 */
public class AuthenticationHandler extends AbstractHandler {
	
	private static final Logger log = Logger
			.getLogger(AuthenticationHandler.class);
	
	private AuthenticationManagerService authenticationManagerService;

	protected static String namespaceValue = "";
	
	protected final static String NAMESPACE = "WebserviceN";
	protected final static String _HEADERS = "WebserviceH";
	protected final static String USERNAME = "WebserviceU";
	protected final static String PASSWORD = "WebserviceP";

	public AuthenticationManagerService getAuthenticationManagerService() {
		return authenticationManagerService;
	}

	public void setAuthenticationManagerService(
			AuthenticationManagerService authenticationManagerService) {
		this.authenticationManagerService = authenticationManagerService;
	}

	public void setNamespaceValue(String arg) {
		namespaceValue = arg;
	}

	public void invoke(MessageContext context) throws Exception {
		log.info("#AuthenticationHandler is invoked");
		InMessage message = context.getInMessage();

		final Namespace TOKEN_NS = Namespace.getNamespace(NAMESPACE, namespaceValue);

		if (message.getHeader() == null) {
			throw new XFireFault("GetRelation Service Should be Authenticated",
					XFireFault.SENDER);
		}

		Element token = message.getHeader().getChild(_HEADERS, TOKEN_NS);
		if (token == null) {
			throw new XFireFault("Request must include authentication token.",
					XFireFault.SENDER);
		}

		String username = token.getChild(USERNAME, TOKEN_NS).getValue();
		String password = token.getChild(PASSWORD, TOKEN_NS).getValue();

		System.out.println("username=" + username);
		System.out.println("password=" + password);

		if (username == null || password == null)
			throw new XFireFault("Supplied Username and Password Please",
					XFireFault.SENDER);

		/**
		 * 
		 * Spring 业务验证
		 * 
		 */
		if (!authenticationManagerService.authenticate(username, password))
			throw new XFireFault("Authentication Fail! Check username/password",
					XFireFault.SENDER);
	}
}



Spring业务验证:
package com.shengshu.demo.xfire.bean;

/**
 * 
 * Jul 4, 2009
 * 
 * @author PangShuqiang
 * @blog http://pangshuqiang.blog.163.com/
 * @Email pangshuqiang@163.com (or) pangsirsky@163.com
 * @QQ 127015919 (or) 285204808
 * @version 1.0
 *
 */
public class AuthenticationManagerService {
    private String username = "";
    private String password = "";
    
	public void setPassword(String password) {
		this.password = password;
	}
	
	public void setUsername(String username) {
		this.username = username;
	}

	/**
	 * 
	 * @param checkUsername
	 * @param chekcPassword
	 * @return
	 */
	public boolean authenticate(String checkUsername, String chekcPassword) {
        if(checkUsername == null || chekcPassword == null)
        	return false;
        
        if(username == null || password == null)
        	return false;
        
        if (username.equals(checkUsername) && password.equals(chekcPassword))
        	return true;
        
        return false;
	}
}



applicationContext-xfire.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"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
	
	<!-- 引入XFire预配置信息 -->
	<import resource="classpath:org/codehaus/xfire/spring/xfire.xml" />
	
	<!-- 用户身份验证实例 -->
	<bean id="authenticationManagerService" class="com.shengshu.demo.xfire.bean.AuthenticationManagerService">
		<property name="username">
			<value>庞树强</value>
		</property>
		<property name="password">
			<value>南宁微庞信息技术有限公司</value>
		</property>
	</bean>

	<!-- 使用XFire验证 -->
	<bean id="authenticationHandler"
		class="com.shengshu.demo.xfire.authentication.AuthenticationHandler">
		<property name="authenticationManagerService">
			<ref bean="authenticationManagerService" />
		</property>
		<property name="namespaceValue">
			<value>http://service.webservice.plugins.flourishtree</value>
		</property>
	</bean>

	<!-- 使用XFire导出器 -->
	<bean id="baseWebService" class="org.codehaus.xfire.spring.remoting.XFireExporter" lazy-init="false" abstract="true">
		<!-- 引用xfire.xml中定义的工厂 -->
		<property name="serviceFactory" ref="xfire.serviceFactory" />
		<!-- 引用xfire.xml中的xfire实例 -->
		<property name="xfire" ref="xfire" />
	</bean>

	<bean id="baseWebServiceMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping" scope="prototype" lazy-init="false" abstract="true">
	</bean>
</beans>


applicationContext-demo-xfire.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"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
	
	<!-- 定义所有访问 WEB 服务的 url -->
    <bean parent="baseWebServiceMapping">
        <property name="urlMap">
            <map>
                <entry key="/demoService">
                    <ref bean="demo"/>
                </entry>
                <entry key="/demoServiceMF">
                    <ref bean="demoMF"/>
                </entry>
                <entry key="/demoCommonService">
                    <ref bean="demoCommon"/>
                </entry>
            </map>
        </property>
    </bean>

    <!-- Declare a parent bean with all properties common to both services -->
    <bean id="demo" parent="baseWebService">
	   	<!-- 业务服务bean -->
        <property name="serviceBean">
            <ref bean="demoImpl"/>
        </property>
	   	<!-- 业务服务bean的窄接口类 -->
        <property name="serviceClass">
            <value>com.shengshu.demo.xfire.service.IDemo</value>
        </property>
        <!-- 需要验证 -->
		[b]<property name="inHandlers">
			<list>
				<ref bean="authenticationHandler" />
			</list>
		</property>[/b]
    </bean>

    <!-- 不需要验证 -->
    <bean id="demoMF" parent="baseWebService">
	   	<!-- 业务服务bean -->
        <property name="serviceBean">
            <ref bean="demoImpl"/>
        </property>
	   	<!-- 业务服务bean的窄接口类 -->
        <property name="serviceClass">
            <value>com.shengshu.demo.xfire.service.IDemoMF</value>
        </property>
    </bean>

    <!-- 字符串和整数 -->
    <bean id="demoCommon" parent="baseWebService">
	   	<!-- 业务服务bean -->
        <property name="serviceBean">
            <ref bean="demoCommonImpl"/>
        </property>
	   	<!-- 业务服务bean的窄接口类 -->
        <property name="serviceClass">
            <value>com.shengshu.demo.xfire.service.IDemoCommon</value>
        </property>
    </bean>
    
</beans>




客户端验证代码:

package com.shengshu.demo.xfire.authentication;

import org.apache.log4j.Logger;
import org.codehaus.xfire.MessageContext;
import org.codehaus.xfire.handler.AbstractHandler;
import org.jdom.Element;
import org.jdom.Namespace;

/**
 * 
 * Jul 4, 2009
 * 
 * @author PangShuqiang
 * @blog http://pangshuqiang.blog.163.com/
 * @Email pangshuqiang@163.com (or) pangsirsky@163.com
 * @QQ 127015919 (or) 285204808
 * @version 1.0
 *
 */
public class ClientAuthHandler extends AbstractHandler {
    private static final Logger log = Logger.getLogger(ClientAuthHandler.class);
    
    //客户端自己配置用户名密码或者更安全的KeyStore方式
    private String username = "";
    private String password = "";
    
	protected static String namespaceValue = "";

	protected final static String _HEADER = "header";
	protected final static String NAMESPACE = "WebserviceN";
	protected final static String _HEADERS = "WebserviceH";
	protected final static String USERNAME = "WebserviceU";
	protected final static String PASSWORD = "WebserviceP";
    
    public ClientAuthHandler() {
    }
    
    public ClientAuthHandler(String username, String password) {
        this.username = username;
        this.password = password;
    }
    
    public void setUsername(String username) {
        this.username = username;
    }
    
    public void setPassword(String password) {
        this.password = password;
    }

	public void setNamespaceValue(String arg) {
		namespaceValue = arg;
	}

	public void invoke(MessageContext context) throws Exception {
        /*******************************************
         * Soap Header方式
         * 从Soap Header中获取用户名密码
         *******************************************/
        final Namespace ns = Namespace.getNamespace(NAMESPACE, namespaceValue);  
        Element el = new Element(_HEADER, ns);

        Element auth = new Element(_HEADERS, ns);
        Element username_el = new Element(USERNAME, ns);
        username_el.addContent(username);
        Element password_el = new Element(PASSWORD, ns);
        password_el.addContent(password);
        auth.addContent(username_el);
        auth.addContent(password_el);
        el.addContent(auth);
        context.getCurrentMessage().setHeader(el);            
        log.info("ClientAuthHandler done!");
	}
}



applicationContext-demo-spring.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"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
	
	<!-- 需要验证 -->
	<bean id="demoService"
		class="org.codehaus.xfire.spring.remoting.XFireClientFactoryBean">
		<property name="serviceClass">
			<value>com.shengshu.demo.xfire.service.IDemo</value>
		</property>
		<property name="wsdlDocumentUrl">
			<value>http://192.168.1.2:8080/x/demoService?WSDL</value>
		</property>
		[b]<property name="outHandlers">
			<ref bean="clientAuthHandler" />
		</property>[/b]
	</bean>
	<!-- 不需要验证 -->
	<bean id="demoServiceMF"
		class="org.codehaus.xfire.spring.remoting.XFireClientFactoryBean">
		<property name="serviceClass">
			<value>com.shengshu.demo.xfire.service.IDemo</value>
		</property>
		<property name="wsdlDocumentUrl">
			<value>http://192.168.1.2:8080/x/demoServiceMF?WSDL</value>
		</property>
	</bean>
	
</beans>
分享到:
评论

相关推荐

    xfire根据WSDL生成客户端代码

    本文将详细介绍如何使用XFire根据WSDL文件生成客户端代码,以便快速地与Web服务进行交互。 首先,我们需要了解WSDL文件的结构。一个WSDL文件通常包含以下关键元素: 1. **服务(Service)**:定义服务的位置,即...

    xfire 例子 源代码

    这个压缩包文件包含的是XFire的源代码示例,这对于理解其工作原理、学习如何开发类似系统或者进行二次开发非常有帮助。让我们深入探讨一下XFire的核心概念、功能以及如何通过源代码学习。 1. **核心概念**: - **...

    xfire+spring+安全认证

    在提供的压缩包文件"xfire+spring"中,可能包含了相关的示例代码、配置文件或者教程文档,帮助开发者理解并实践这一整合过程。通过学习这些资源,你可以深入理解如何将这两个强大的工具结合起来,构建出既高效又安全...

    xfire web service调用代码

    本篇将深入探讨XFire Web服务的调用代码及其相关知识点。 一、Web服务基础 Web服务基于开放标准,如SOAP(Simple Object Access Protocol)、WSDL(Web Services Description Language)和UDDI(Universal ...

    WebService之XFire和Jax实现身份验证

    5. 实践编写客户端和服务端代码,进行身份验证测试,确保通信安全。 通过以上知识的学习和实践,开发者能够有效地在Java环境下利用XFire和JAX实现WebService的身份验证,从而保护服务的安全,防止未授权访问。同时...

    Xfire的client.zip_Xfire客户端代码_webservice

    Xfire客户端代码是实现与Xfire服务器通信的代码库,它可能包含了多种语言的实现,如Java、C#或Python等。这些代码通常会包含以下关键组件: 1. **服务代理类**:这是客户端与Web服务交互的核心部分,它封装了服务的...

    xfire验证签名加密详细

    本文将详细介绍如何在Spring框架中集成XFire并实现基于WS-Security的安全策略,包括验证、签名和加密。首先,我们需要创建一个Web工程`xfireDemo`,并添加必要的依赖库。这些库包括Spring的核心模块,AOP支持,日志...

    xfire客户端生成

    总结,XFire客户端生成是Java开发Web服务客户端的一种高效方式,通过自动化的代码生成,开发者可以快速地接入并调用Web服务,大大减少了手动编写客户端代码的工作量。在实际开发中,结合Spring等框架,可以构建出...

    xfire数据同步服务端

    4. **自动代码生成**:xfire提供了代码生成工具,可以自动生成服务接口和客户端代码,提高了开发效率。 二、xfire在数据同步中的作用 1. **数据交换接口**:xfire可以被用来定义和实现数据同步的Web服务接口,使得...

    WebService之XFire开发文档和代码

    在“WebService之XFire开发文档和代码”压缩包中,包含了详细的开发文档,帮助开发者了解如何使用XFire创建、部署和测试WebService。同时,还提供了一些代码示例,可以帮助开发者快速上手实践。通过学习这些文档和...

    xfire框架构建webservice应用(myecllipse自动代码生成 )

    1. **简洁性**:XFire的配置非常简单,不需要复杂的部署描述符。 2. **灵活性**:支持多种绑定方式,包括RPC/encoded、RPC/literal和Document/literal。 3. **性能**:XFire通过优化XML解析和序列化过程来提高性能。...

    xfire1.2.6源代码源文件

    xfire1.2.6 源代码 源文件 源程序。供调试、研究用。

    Xfire API,Xfire帮助文档

    Xfire API 是一款专为游戏社区设计的接口,它允许开发者构建与Xfire服务交互的应用程序,从而增强玩家的游戏体验并提供社交功能。Xfire API 主要围绕Web服务概念,这意味着它通过网络提供一系列功能,使得第三方...

    xfire依赖jar包

    xfire是一个早期流行的开源Web服务框架,主要用于构建SOAP(简单对象访问协议)和RESTful(Representational State Transfer)服务。这个框架使得Java开发者能够轻松地创建、部署和消费Web服务。xfire依赖于一系列的...

    spring 集成xfire 比较好的一种方式

    将这两者结合可以利用 Spring 的强大功能来管理和配置 XFire,同时保持代码的简洁和模块化。 ### Spring 集成 XFire 的优势 1. **依赖注入(Dependency Injection)**:Spring 的核心特性之一,通过依赖注入可以...

    xfire创建服务端客户端源码

    《xfire创建服务端客户端源码详解》 Xfire,作为一个历史悠久的开源项目,曾经在游戏服务器通信领域占据着重要地位。它提供了丰富的API和工具,使得开发者能够轻松地构建服务端与客户端之间的通信框架。本文将深入...

    xfire

    xfire是一款历史悠久的在线游戏平台,它在2004年由GameSpy Industries开发并发布,主要功能是为玩家提供即时通讯、好友列表、游戏内聊天和游戏统计等功能,旨在增强玩家的游戏体验。xfire 1.26是该平台的一个特定...

    xfire-all-1.2.6 xfire所需的全部包

    它不仅仅是一个简单的聊天工具,而是一个集成了语音聊天和文字聊天的平台。在1.2.6版本中,用户可以创建和加入多个聊天室,进行多人会话。此外,Xfire还支持一对一的私人对话,确保了用户之间的隐私交流。同时,语音...

    xfire https

    在Eclipse中,可以使用Xfire插件或手动编写代码来实现这个过程。 3. **配置HTTPS连接**:为了使用HTTPS,需要配置Xfire客户端以支持SSL。这通常涉及到设置SSLSocketFactory,指定信任的证书,以及处理可能出现的...

    webservice Soap和XFire2种方式代码列子

    综上所述,"webservice Soap和XFire2种方式代码列子"的压缩包可能包含使用SOAP协议和XFire框架创建Web服务的示例代码。通过学习这些代码,开发者可以更好地理解如何在Java环境中构建和消费SOAP服务,以及XFire在其中...

Global site tag (gtag.js) - Google Analytics