加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

xifire webservice 接口 带头信息安全验证的实例

发布时间:2020-12-16 23:54:27 所属栏目:安全 来源:网络整理
导读:下面文章详细说明了java怎么发布和调用一个webservice接口进行项目之间的数据交互。 文章地址:java使用XFire组件开发WebService入门实例 本文介绍 带验证的接口请求 : webservice不可能暴漏在公网上任意供别人调用,需要在服务端加入一定的验证措施。 webs


下面文章详细说明了java怎么发布和调用一个webservice接口进行项目之间的数据交互。

文章地址:java使用XFire组件开发WebService入门实例



本文介绍 带验证的接口请求 :

webservice不可能暴漏在公网上任意供别人调用,需要在服务端加入一定的验证措施。


webservice 服务端代码:



services.xml 代码

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

	<service>
		<name>HelloWebService</name>
		<serviceClass>
			com.sdjz.webservice.IHelloWebService
		</serviceClass>
		<implementationClass>
			com.sdjz.webservice.HelloWebServiceImpl
		</implementationClass>
		
		
		<!--注册监听处理器-->  
        <inHandlers>  
            <handler handlerClass="com.sdjz.webservice.checkclient.ClientAuthenticationHandler"></handler>  
        </inHandlers> 
        
        
		<style>wrapped</style>
		<use>literal</use>
		<scope>application</scope>
	</service></beans>


接口HelloWebService

package com.sdjz.webservice;
//Generated by MyEclipse

public interface IHelloWebService {
	/**
	 * example
	 * @param message
	 * @return
	 */
	public String example(String message);
	
}

接口实现HelloWebServiceImpl
package com.sdjz.webservice;
//Generated by MyEclipse

public class HelloWebServiceImpl implements IHelloWebService {
	
	public String example(String message) {
		return "Webservice server 返回的信息:"+message;
	}
	
}

接口请求前的验证?ClientAuthenticationHandler

package com.sdjz.webservice.checkclient;



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.Element;
import org.jdom.Namespace;


/**
* XFire的回调的Handler,在XFire配置文件中配置
* Server端的认证模块,回调处理模块
* 
* ClientAuthHandler跟ClientAuthenticationHandler要一起用,或者都不用
* 
* @author Administrator
* 
*
*/
public class ClientAuthenticationHandler extends AbstractHandler {
    private static final Logger log = Logger.getLogger(ClientAuthenticationHandler.class);
    
    public void invoke(MessageContext context) throws Exception {
        
        log.info("#AuthenticationHandler is invoked");
    	
		if (context.getInMessage().getHeader() == null) {
			throw new org.codehaus.xfire.fault.XFireFault("请求必须包含验证信息",org.codehaus.xfire.fault.XFireFault.SENDER);
		}
		Element token = context.getInMessage().getHeader().getChild(
				"AuthenticationToken");
		if (token == null) {
			throw new org.codehaus.xfire.fault.XFireFault("请求必须包含身份验证信息",org.codehaus.xfire.fault.XFireFault.SENDER);
		}
		String username = token.getChild("Username").getValue();
		String password = token.getChild("Password").getValue();
        
        /**
         * 检查用户名密码是否正确
         */
        PasswordAuthenticationManager pamanager=new PasswordAuthenticationManager();
        if(!pamanager.authenticate(username,password))
            throw new XFireFault("Authentication Fail! Check username/password",XFireFault.SENDER);

        
    }
}
用户名密码校验器(有数据库表可以写业务方法进行校验)

package com.sdjz.webservice.checkclient;


/**
 * 密码验证器
 * @author Administrator
 *
 */
public class PasswordAuthenticationManager {


	
	public  boolean authenticate(String username,String password){
		boolean flag=false;
		if("QQ809044093".equals(username)&&"809044093".equals(password)){
			flag=true;
		}
		return flag;
	}
}



********************************************以上是服务端代码*********************************************

webservice Client 代码


客户端认校验代码

package com.bean;

import org.apache.log4j.Logger;
import org.codehaus.xfire.MessageContext;
import org.codehaus.xfire.handler.AbstractHandler;
import org.jdom.Element;
/** 
* 客户端端的认证模块,回调处理模块 
* 每个需要认证的WebService方法都可以挂这个Handler 
*  
* 仅用于Demo,从解耦和易用性出发, 
* 没有跟Acegi结合,你可以任意扩展 
* 默认用户名/密码是QQ809044093/809044093 
*  
* ClientAuthHandler跟ClientAuthenticationHandler要一起用,或者都不用
*  
* @author Administrator
* 
* 
*/
public class ClientAuthHandler extends AbstractHandler {
	 
	
	private static final Logger log = Logger.getLogger(ClientAuthHandler.class); 
	private String username;
	private String password;
	
	public void invoke(MessageContext arg0) throws Exception {
		    Element el = new Element("header"); 
		    arg0.getOutMessage().setHeader(el); 
	        Element auth = new Element("AuthenticationToken"); 
	        Element username_el = new Element("Username"); 
	        username_el.addContent(username); 
	        Element password_el = new Element("Password"); 
	        password_el.addContent(password); 
	        auth.addContent(username_el); 
	        auth.addContent(password_el); 
	        el.addContent(auth); 

	}

	
	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}
}

客户端请求接口代码

package com.sdjz.webserviceclient;

import java.net.MalformedURLException;
import java.net.URL;

import org.codehaus.xfire.client.Client;

import com.bean.ClientAuthHandler;



public class WSClient {
	public static void main(String[] args) throws MalformedURLException,Exception{
		
		//最简单的demo
//		Client client = new Client(
//				new URL(
//						"http://localhost:9080/WebServiceServer/services/HelloWebService?wsdl"));
//		Object[] result = client.invoke("example",new Object[] { "web Hello World!" });
//		System.out.println(result[0]);
		
		
		
		
		
		
		//加入验证头信息
			Client 	client = new Client(
					new URL(
							"http://127.0.0.1:9080/WebServiceServer/services/HelloWebService?wsdl"));
		
			ClientAuthHandler wscname	=	new ClientAuthHandler();
			wscname.setUsername("QQ809044093");
			wscname.setPassword("809044093");
			client.addOutHandler(wscname);
			Object[] result = client.invoke("example",new Object[] { "Hello World!11" });
			System.out.println(result[0]);
		
		
		
	}
}
这样 就完成了 带验证的webservice接口实例。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读