`
xiaobian
  • 浏览: 588092 次
  • 来自: 北京
社区版块
存档分类
最新评论

Xfire 认证

阅读更多

关键字: webservices xfire


XFire提供了四种身份验证的方式,分别是http验证,JSR181,Handler验证,WS-Security。

SOAP的原理告诉我们一个WS交互的流程是客户端发送请求->服务器接收请求->服务器发送数据->客户端接收数据,handler可以让我们在这四个操作中之前进行编码,所以,我们的验证进行在客户端发送请求和服务器接收请求的时候,因此,我们要写两个handler,然后把它们装配上就可以了。

Handler验证方式如下:

主要参考的实例是XFIREdemo中的BOOK

服务器的代码如下

package com.nstar.xfire.auth;

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

public class XfireAuthenticationHandler  extends AbstractHandler {
 private static final String USERNAME = "biansutao";
 private static final String PASSWORD = "12345678";
 private static final String NS = "http://xfire.codehaus.org/biansutao";
 
 public void invoke(MessageContext ctx) throws Exception {
  // Check if header exists
  
  Element header = ctx.getInMessage().getHeader();
  if (header == null) {
   throw new XFireRuntimeException("Missing SOAP Header");
  }
  // Does it have version tag
  Element name = header.getChild("USERNAME",Namespace.getNamespace(NS));
  Element pass = header.getChild("PASSWORD",Namespace.getNamespace(NS));
  if(name.getValue().equals(USERNAME) && pass.getValue().equals(PASSWORD)){
   System.out.println("验证通过");
  }
  else{
   System.out.println("验证未通过");
   throw new XFireRuntimeException("Authentication Failure");
  }
  ctx.setProperty("USERNAME", USERNAME);
  ctx.setProperty("PASSWORD", PASSWORD);
 }
}

然后需要在services.xml中配置如下:

xml 代码

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xfire.codehaus.org/config/1.0">
 <service>
  <name>HelloWordService</name>
  <serviceClass>com.nstar.xfire.IHelloWordService</serviceClass>
  <implementationClass>
   com.nstar.xfire.HelloWordServiceImpl
  </implementationClass>
  <style>wrapped</style>
  <use>literal</use>
  <scope>application</scope>
  <inHandlers>
   <handler handlerClass="com.nstar.xfire.auth.XfireAuthenticationHandler"></handler>
     </inHandlers>
 </service>
</beans>


客户端代码

package com.nstar.xfire.client.auth;

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

public class ClientHeaderHandler extends AbstractHandler {
 //用户验证
 private static final String USERNAME = "biansutao";
 private static final String PASSWORD = "12345678";
 private static final String NS = "http://xfire.codehaus.org/biansutao";
 public void invoke(MessageContext ctx) throws Exception {
  Element header = ctx.getOutMessage().getOrCreateHeader();
  header.addContent(new Element("USERNAME",NS).addContent(USERNAME));
  header.addContent(new Element("PASSWORD",NS).addContent(PASSWORD));
 }

}

 

package com.nstar.xfire.client;

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

import org.codehaus.xfire.*;
import org.codehaus.xfire.client.Client;
import org.codehaus.xfire.client.XFireProxy;
import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;
import com.nstar.xfire.IHelloWordService;
import com.nstar.xfire.Student;
import com.nstar.xfire.client.auth.ClientHeaderHandler;

public class HelloWorldClient {

 /**
  * @param args
  */
 public static void main(String[] args) {
  Service serviceModel = new ObjectServiceFactory().create(IHelloWordService.class);
  XFireProxyFactory factory = new XFireProxyFactory(XFireFactory.newInstance().getXFire());
  String url = "http://10.232.75.61:8090/Xfire/services/HelloWordService";
  try {
   IHelloWordService service = (IHelloWordService) factory.create(serviceModel, url);
   
      XFireProxy proxy = (XFireProxy)Proxy.getInvocationHandler(service);
         Client client = proxy.getClient();
         client.addOutHandler(new ClientHeaderHandler());
   
   List list = new ArrayList();
   List list1 = new ArrayList();
   list.add(new String("测试"));
   int age = service.getAge("边苏涛");
   String name = service.getName(1);
   Student s = service.getOneStudent(27);
   list1 = service.getStudent(list);
   System.out.println("边苏涛's age =="+age);
   System.out.println("学号为1的学生姓名 "+name);
   System.out.println("age == "+s.getAge()+" name == "+s.getName()+" list content "+s.getList().get(0).toString());
   System.out.println(list1.size());
   for(int i=0;i<list1.size();i++){
    System.out.println(list1.get(i).toString());
   }
  } catch (MalformedURLException e) {
   e.printStackTrace();
  }
 }
}





这样一来,使用这个原理就可以针对特定用户进行服务调用了。

 

 

示例代码:

服务器端:

 

客户端:

 

  • Xfire.rar (13.3 KB)
  • 描述: 服务器端代码
  • 下载次数: 77
  • Test.rar (6.8 KB)
  • 描述: 客户端代码
  • 下载次数: 76
分享到:
评论

相关推荐

    xfire+spring+安全认证

    "xfire+spring+安全认证"的主题聚焦于如何利用XFire和Spring框架来实现安全的Web服务。XFire是一个用于创建、消费和部署SOAP Web服务的Java库,而Spring框架则是一个广泛使用的全功能应用开发框架,提供了包括安全性...

    Xfire API,Xfire帮助文档

    1. 认证:确保每次请求都包含有效的API密钥。 2. API限制:大多数API都有调用频率限制,避免过于频繁的请求以免触发限制。 3. 错误处理:处理可能出现的错误响应,如无效请求、超时或服务器错误。 4. 数据安全:保护...

    xfire1.2.6 ws-security示例

    xfire1.2.6是早年间一个流行的开源SOAP服务框架,它允许开发者构建和消费Web服务。WS-Security(Web Services Security)是基于SOAP消息的安全标准,用于保护Web服务免受各种攻击,如篡改、伪造等。在这个示例中,...

    Java使用XFire调用WebService接口

    9. **安全性**:对于涉及到敏感数据或认证的Web服务,XFire也提供了安全特性,如SSL/TLS加密、WS-Security等,以保护通信的安全。 10. **持续集成与部署**:在开发完成后,XFire生成的客户端代码可以被包含在应用的...

    Xfire案例,webserver——Xfire案例

    6. **安全性**:作为一款涉及用户数据的应用,Xfire必须重视安全措施,包括数据加密、防止DDoS攻击、用户认证和授权机制。 7. **负载均衡**:随着用户数量的增长,Xfire可能部署了多个web服务器实例,通过负载均衡...

    Xfire的client.zip_Xfire客户端代码_webservice

    2. **配置文件**:客户端代码可能包含XML配置文件,用于存储Web服务的URL、认证信息、端口等参数,便于配置和管理。 3. **HTTP/HTTPS通信模块**:由于Web服务通常基于HTTP或HTTPS协议,因此客户端代码需要有相应的...

    xfire客户端生成

    2. **设置认证和配置**:如果Web服务需要身份验证或其他特定的HTTP头信息,可以在代理类实例化时设置。 3. **调用服务方法**:通过代理对象调用Web服务提供的方法,传入相应的参数。 4. **处理响应**:服务方法的...

    xfire发布webservice服务

    7. **安全与认证**:XFire支持多种安全模型,如基本认证、Digest认证和WS-Security,可以保护你的Web服务免受未经授权的访问。 8. **扩展性**:XFire允许你添加自定义行为、数据绑定和序列化机制,以适应特定的业务...

    xfire 1.2.6 API帮助文档.rar

    首先,开发者需要进行API的注册和授权,获取必要的API密钥,以便于后续的请求认证。然后,通过HTTP请求,开发者可以调用各种API接口来获取用户信息,如用户名、头像、在线状态等,或者操作好友列表,添加、删除好友...

    xfire+Spring整合

    6. **安全控制**:Spring的安全框架可以与XFire集成,提供认证和授权机制。例如,可以使用Spring Security(原Acegi)来保护Web服务,确保只有经过身份验证的用户才能访问。 7. **异常处理**:Spring的异常翻译功能...

    xfire_client_jar

    5. 配置文件:如client-config.xml,用于配置Web服务的地址、认证信息等。 6. 客户端工具:如命令行工具或图形界面工具,帮助用户测试和调试Web服务。 在实际开发中,将这个XFire客户端JAR添加到项目的类路径中,...

    xfire访问webservice客户端用到的jar包

    - **配置传输机制**:设置HTTP或HTTPS等传输方式,以及必要的认证信息。 - **调用服务**:通过代理对象调用Web服务的方法,传递参数并获取响应。 4. **配置与依赖管理** 在大型项目中,通常会使用构建工具如...

    xfire web service调用代码

    2. 初始化代理:在调用服务之前,需要初始化代理,通常包括设置服务地址和任何必要的认证信息。 3. 调用服务方法:通过代理类的对象调用Web服务的方法,传入参数并获取返回值。 4. 处理结果:服务调用完成后,解析...

    spring xfire 客户端实例

    在Web服务客户端开发中,通常需要处理的问题包括:错误处理、事务管理、安全认证、性能优化等。Spring XFire提供了一套完整的机制来处理这些复杂性,使得开发者可以专注于业务逻辑,而不是底层的通信细节。 至于...

Global site tag (gtag.js) - Google Analytics