`
ajax_xu
  • 浏览: 156237 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

xfire实现webservice时的权限控制

阅读更多
XFire是codeHaus组织提供的一个开源框架,它构建了POJO和SOA之间的桥梁,主要特性就是支持将POJO通过非常简单的方式发布成Web服务,这种处理方式不仅充分发挥了POJO的作用,简化了Java应用转化为Web服务的步骤和过程,也直接降低了SOA的实现难度,用过xfire的朋友一定会这样的感触,对于xfire的基本配置及调用方式已经很多的相关文章,这里主要对xfire的权限管理的实现做一下详细的讲解。

       Xfire采用了WSS4J作为Web Services Security (WS-Security)的实现,WSS4J是一java的jar包,它可以用来在发布服务时标记访问密码和在调用时验证密码。这个包的下载地址为http://www.apache.org/dyn/closer.cgi/ws/wss4j/,

       在使用WS-Security之前我们需要安装一个jdk的加密处理包(Unlimited Strength Jurisdiction Policy Files),下载地址为http://java.sun.com/j2se/1.5.0/download.jsp(不太显眼,在下面),下载后的文件名为jce_policy-1_5_0.zip,解压后里面有两个jar文件,分别为local_policy.jar和US_export_policy.jar,把这两个文件放到java_home/jre/lib/security目录下覆盖原来的文件。还需要安装一个bcprov-jdk15-141.jar,下载地址为http://BouncyCastle.org,下载后放到java_home/jre/lib/ext目录下。这两个包都是必须的。

       好了,以上是准备工作,下面我们就开为服务设置访问权限吧!

     

       1.先写一个类叫PasswordHandler,代码如下

package org.codehaus.xfire.demo;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.UnsupportedCallbackException;

import org.apache.ws.security.WSPasswordCallback;
public class PasswordHandler implements CallbackHandler {

     private Map passwords = new HashMap();
     public PasswordHandler() {
          passwords.put("user1", "pwd1");
          passwords.put("user2", "pwd2");
     }
     public void handle(Callback[] callbacks) throws IOException,
              UnsupportedCallbackException {
 
          WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];
          String id = pc.getIdentifer();
          pc.setPassword((String) passwords.get(id));
    }
}

        其中user1,user2表示可以提供多个用户名密码,调用时任选一个。



     2.在services.xml配置中加入如下代码:

<service>
  <name>BookServiceUTHP</name>
  <namespace>http://xfire.codehaus.org/BookService</namespace>
  <serviceClass>example.webservice.service.BookService</serviceClass>
  <inHandlers>
   <handler handlerClass="org.codehaus.xfire.util.dom.DOMInHandler" />
   <bean class="org.codehaus.xfire.security.wss4j.WSS4JInHandler" xmlns="">
    <property name="properties">
     <props>
      <prop key="action">UsernameToken</prop>
      <prop key="passwordCallbackClass">
       org.codehaus.xfire.demoPasswordHandler
      </prop>
     </props>
    </property>
   </bean>

  </inHandlers>
</service>

其中红色部分的org.codehaus.xfire.demoPasswordHandler   就是我们刚才上面写的那个类,这样别人在调服务的时候就会调用那个类来验证密码,密码的传输的过程会使用安装的那两个包进行加密和解密。OK,发布完成了。

    3.服务的调用,写一个main方法下面加入

Service serviceModel = new ObjectServiceFactory().create(IBook.class);//接口类
  Object service = new XFireProxyFactory().create(serviceModel, getUrl()
    + getServiceName());
   Client client = ((XFireProxy) Proxy.getInvocationHandler(service)).getClient();
   client.addOutHandler(new DOMOutHandler());
   Properties properties = new Properties();
   properties.setProperty(WSHandlerConstants.ACTION, WSHandlerConstants.USERNAME_TOKEN);
   properties.setProperty(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_DIGEST);
   client.addOutHandler(new WSS4JOutHandler(properties));
   client.setProperty(WSHandlerConstants.USER,"user1");
   client.setProperty(WSHandlerConstants.PW_CALLBACK_REF,new PasswordHandler("pwd1"));//PasswordHandler是客户端的处理密码的类,代码如下


import java.io.IOException;

import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.UnsupportedCallbackException;

import org.apache.ws.security.WSPasswordCallback;

public class PasswordHandler implements CallbackHandler {

String password ;

public PasswordHandler(String password) {
  this.password = password;
}

public void handle(Callback[] callbacks) throws IOException,
   UnsupportedCallbackException {
 
  WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];
  pc.setPassword(password);

}

}

转载 http://blog.csdn.net/enxiuwang/article/details/3997757
分享到:
评论

相关推荐

    Xfire调用webservice无法接收到参数问题解决

    标题"Xfire调用webservice无法接收到参数问题解决"指出的核心问题是:当使用Xfire作为客户端调用Web服务时,服务端无法正确接收到传递的参数。这可能是由于多种原因引起的,如: 1. **XML序列化与反序列化问题**:...

    Xfire整合webservice jar包

    然而,这里的“Xfire整合webservice的所有jar包”涉及到的是Xfire与Web服务(Web Service)的集成,这通常指的是将Xfire的功能通过Web服务接口对外提供,以便其他应用或系统可以调用和利用。 Web服务是一种基于标准...

    WebService权限

    【WebService权限】是一个重要的主题,尤其在开发分布式应用程序时,涉及到如何控制对Web服务的访问。Web服务通常作为跨组织和系统之间的接口,因此确保只有授权的用户或系统能够访问这些服务至关重要。以下是对这个...

    webService(xfire)

    在本案例中,我们关注的是基于Xfire实现的WebService,这是一套包括客户端和服务端的解决方案。 Xfire是一款已不再维护的即时通讯软件,但它曾经提供了一个强大的API接口,使得开发者能够构建与游戏相关的Web服务。...

    java webservice之xfire与spring2集成(三)

    通过AOP,可以实现服务级别的权限控制和事务管理。 8. **版本控制**: 对于需要升级服务的情况,可以通过服务版本号来区分不同版本的服务,确保向后兼容。 9. **服务治理**: 结合Spring的其他组件,如Spring ...

    android 调用webservice 有源码+jar

    在调用Webservice时,需要构造SOAP请求并发送到服务器。 3. **调用Webservice接口** 在Android中,可以通过以下步骤调用Webservice接口: - 创建SOAP请求:根据Webservice的WSDL(Web Service Description ...

    xfire+spring+hibernate的一种整合方式

    - 配置Spring的事务管理器,以便在执行数据库操作时进行事务控制。 - 配置XFire,指定服务实现类和WSDL(Web Service Definition Language)的生成策略。 - 在`web.xml`中,设置Spring的DispatcherServlet和XFire...

    android app webservice 交互

    本文将深入探讨如何使用Android Developer Tools (ADT) 创建Android应用程序,并通过MyEclipse 8.5集成的XFire库来实现与Web服务的通信。 **一、Android Developer Tools (ADT)** ADT是Google为Eclipse IDE提供的...

    泛微 ecology9.0 文档(DocService)WebService接口使用说明

    ### 泛微ecology9.0文档(DocService)WebService接口使用详解 #### 一、部署准备工作 在开始使用泛微ecology9.0的DocService WebService接口之前,需要进行一系列的部署准备工作。 ##### 1. 更新lib目录下的文件...

    mybatis+spring3+mysql整合的webservice的service

    例如,可以使用Spring Security进行权限控制,使用缓存技术提高查询效率,或者通过AOP实现全局的日志和事务管理。 文章链接可能提供了详细的步骤和示例代码,可以帮助读者更深入地理解如何完成这个整合过程。在阅读...

    Android 在Android远程上传以及下载图片---XFire框架-IT计算机-毕业设计.zip

    同时,对于Android 6.0及以上版本,需要在运行时动态获取权限。 2. **图片处理**:在上传图片前,通常需要对图片进行压缩,防止过大文件导致上传时间过长或者服务器压力增大。可以使用Android的Bitmap类配合`...

    使用cxf的webservice安全验证

    本文将深入探讨如何在使用CXF时实现Web服务的安全验证。 首先,理解CXF的背景至关重要。CXF(Codehaus XFire的继承者)是一个全面的服务框架,支持SOAP、RESTful服务,以及多种协议和绑定,如HTTP、JMS和JBI。其...

    xfie解析xml,加头部验证方式和验证内容的

    标题中的"xfie解析xml,加头部验证方式和验证内容"指的是使用xfire库处理XML数据时,如何添加和验证XML消息的头部信息。这通常涉及到SOAP(Simple Object Access Protocol)协议,SOAP头可以包含认证、授权和其他元...

    java面试资料

    - 可以通过Java的XFire库来实现WebService服务的发布和消费。 #### 十、EJB (Enterprise JavaBeans) - **EJB**: 企业级JavaBean,是一种服务器端组件模型,主要用于构建企业级应用。 - 包括会话Bean、实体Bean和...

    参考简历模板三.doc

    - **WebService、XML**:能使用XFire和Axis进行开发部署。 - **Web应用服务器**:熟练使用Tomcat、JBoss、Resin、Jetty、Apache、EasyPHP等。 - **缓存技术**:熟练使用Redis,掌握Jetis API。 - **前端技术**:...

    ASP EXCEL导入SQL

    而业务共通服务指基于平台共通服务,而对于所有业务具有共通性的服务,如日志审核、操作回滚、数据安全、全文检索、权限角色等;  服务层是对于平台运营、维护最核心的服务实现,是平台正常运行的基础。  存储层 ...

Global site tag (gtag.js) - Google Analytics