服务端:package com.xxx.authentication;
import org.codehaus.xfire.MessageContext;
import org.codehaus.xfire.handler.AbstractHandler;
import org.codehaus.xfire.transport.http.XFireServletController;
import org.jdom.Element;
public class AuthenticationHandler extends AbstractHandler {
/**
* 安全服务器端
*/
public void invoke(MessageContext cfx) throws Exception {
if (cfx.getInMessage().getHeader() == null) {
throw new org.codehaus.xfire.fault.XFireFault("请求必须包含验证信息",
org.codehaus.xfire.fault.XFireFault.SENDER);
}
Element token = cfx.getInMessage().getHeader().getChild(
"AuthenticationToken");
String remoteip = XFireServletController.getRequest().getRemoteAddr();
System.out.println("服务端得到客户端的ip为:" + remoteip );
String uri = cfx.getInMessage().getUri();
int port = XFireServletController.getRequest().getRemotePort();
System.out.println("服务端得到客户端的端口"+ port+ " URI为:" + uri);
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();
try {
// 进行身份验证 ,只有abcd@1234的用户为授权用户
if (username.equals("abcd") && password.equals("1234"))
System.out.println("身份验证通过");
else
throw new Exception();
} catch (Exception e) {
throw new org.codehaus.xfire.fault.XFireFault("非法的用户名和密码",
org.codehaus.xfire.fault.XFireFault.SENDER);
}
}
}
然后再services.xml配置需要验证的service:
<service>
<name>xx</name>
<namespace>www.service/xx</namespace>
<serviceClass>com...Ixxx</serviceClass>
<implementationClass>com...Ixxx</implementationClass>
<!-- 验证 -->
<inHandlers>
<handler handlerClass ="com.xx.authentication.AuthenticationHandler" ></handler >
</inHandlers>
<style>wrapped</style>
<use>literal</use>
<scope>application</scope>
</service>
客户端:
package com.xx.authentication;
import org.codehaus.xfire.MessageContext;
import org.codehaus.xfire.handler.AbstractHandler;
import org.jdom.Element;
/**
* 安全客户调用端
*/
public class ClientAuthenticationHandler extends AbstractHandler {
private String username = null;
private String password = null;
public ClientAuthenticationHandler() {
}
public ClientAuthenticationHandler(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 invoke(MessageContext context) throws Exception {
//为SOAP Header构造验证信息
Element el = new Element("header");
context.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);
}
}
客户端调用:
Service serviceModel = new ObjectServiceFactory().create(IhelloWorld.class);
IhelloWorld service = (IhelloWorld) new XFireProxyFactory().create(serviceModel, "http://xxx/service/xxx");
XFireProxy proxy = (XFireProxy)Proxy.getInvocationHandler(service);
Client client = proxy.getClient();
//发送授权信息
client.addOutHandler(new ClientAuthenticationHandler("abcd","1234"));
// 下面调用服务端方法....
限定IP 在AuthenticationHandler 里面invoke里面可以验证,访问你的IP都已经得到了,再加上用户名密码验证,这样就可以对其限制。
分享到:
相关推荐
WebService CXF是一个强大的开源框架,用于创建和消费Web服务。它允许开发者基于WSDL(Web Service Description Language)文件快速地生成服务端和客户端代码,极大地简化了Web服务的开发流程。在本篇中,我们将深入...
【标题】"webservice--javademo" 涉及的知识点主要集中在Java Web Services(JAX-WS)上,这是一种用于创建Web服务的技术。在Java领域,Web服务是一种允许不同应用程序之间交换数据的方式,它基于开放标准,如SOAP...
Xfire在Spring下实现安全的WebService详述---配置 -
WebService——AXIS详解 在IT领域,WebService是一种基于标准的、平台无关的、可以在不同系统之间交换数据的方式。它利用XML(可扩展标记语言)作为数据格式,HTTP作为传输协议,SOAP(简单对象访问协议)作为消息...
eclipse 根据 wsdl 文件生成 webservice 客户端 eclipse 是一个功能强大且灵活的集成开发环境(IDE),它提供了许多插件和工具来帮助开发者快速开发和测试应用程序。其中一个重要的应用场景是使用 wsdl 文件生成 ...
在本主题中,我们将深入探讨如何使用WSDL生成WebService接口以及编写Test调用方法进行测试。 1. WSDL基础 WSDL文件是一个XML文档,它描述了服务的位置(endpoint)、使用的消息格式(message)和服务提供的操作...
Java开发WebService实例--计数器.mht
本篇文章将详细讲解如何根据WSDL链接来调用WebService接口,并探讨相关工具的使用。 1. **理解WSDL** WSDL文件是一个XML文档,它定义了服务提供者和消费者之间的交互细节。它包含了服务的地址(endpoint)、消息...
【Java WebService Jax-WS 创建】是Java中创建Web服务的一种常见方式,主要用于构建基于SOAP(Simple Object Access Protocol)的Web服务。JAX-WS(Java API for XML Web Services)是Java EE 5及更高版本中提供的...
二、Asp.Net 3.5与WebService Asp.Net 3.5是微软.NET Framework的一个版本,它包含了许多改进和新特性,如Linq、ASP.NET MVC等。对于WebService开发,Asp.Net提供了System.Web.Services命名空间,其中的WebService类...
Java与Sap对接的的demo,客户提供了wsdl文件,刚开始不会使用,网上疯狂找资料,很难找到,为此还特地冲了csdn会员下载资料,然并卵。。。刚开始下的都没得用!后面到现场开发了,再查资料,终于找到几个好的demo,2...
【WSDL详解(Webservice)】 Web服务描述语言(Web Services Description Language,简称WSDL)是一种基于XML的应用,主要用于描述Web服务的接口和其通信细节。WSDL文档定义了一组服务访问点,允许客户端通过这些点与...
Myeclipse创建WebService实例-很好用.doc 验证成功
NULL 博文链接:https://newleague.iteye.com/blog/815158
【WebServiceStudio】是一款轻量级的Web服务测试工具,它允许开发者快速地测试SOAP和RESTful Web服务。这个名为"WebServiceStudio-master"的压缩包很可能包含了该工具的源代码、文档和其他相关资源,使得用户可以对...
可以通过浏览器访问WSDL文件的URL来验证服务是否部署成功。 ### 总结 以上介绍了三种基于WSDL生成WebService服务端的方法,每种方法都有其特点和适用场景。`wsdl2java`命令简单直接,适用于命令行环境;SOAPUI工具...
在本教程中,我们将探讨“webservice复习-helloworld”这个主题,它是一个基础的Web服务示例,帮助开发者理解和掌握Web服务的基本概念和实现。 首先,Web服务的核心标准是SOAP(Simple Object Access Protocol),...