首页 > 其他分享 >web Service实践——Xfire的ws-security用户名和密码安全验证

web Service实践——Xfire的ws-security用户名和密码安全验证

时间:2023-05-21 23:04:48浏览次数:48  
标签:web String Service xfire Xfire org import security codehaus



一、参照《Web Service实践之——XFire实例》(本空间的文章)建立一个Xfire的应用;

二、引入的jar包:

xfire-1.2.6的所有jar包(包括xfire-all-1.2.6.jar),下载地址:http://xfire.codehaus.org/Download

wss4j-1.5.8.jar:下载地址:http://ws.apache.org/wss4j/

三、服务器端

1、PasswordHandler类,继承自avax.security.auth.callback.CallbackHandler

package com.channelsoft.hr.wssecurity;
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 {
    @SuppressWarnings("unchecked")
private Map passwords = new HashMap();    @SuppressWarnings("unchecked")
public PasswordHandler() {
        passwords.put("server", "serverpass");//服务器端记录的用户名和密码,可以有多个    }    public void handle(Callback[] callbacks) throws IOException,//回调接口方法
            UnsupportedCallbackException {
        System.out.println("Handling Password!");
        WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];//获取回调对象        String id = pc.getIdentifer();//获取用户名        System.out.println("id:"+id+" ,password:"+(String) passwords.get(id));String validPw = (String)password.get(id);②-3:获取用户对应的正确密码
②-4:如果是明文密码直接进行判断
if(WSConstants.PASSWORD_TEXT.equals(callback.getPasswordType())){
String pw = callback.getPassword();
if(pw == null || !pw.equalsIgnoreCase(validPw)){
throw new WSSecurityException("password not match");
}
}else{
        pc.setPassword((String) passwords.get(id));//如果是密码摘要,向回调设置正确的密码(明文密码)    }
}

2、service.xml

<beans xmlns="http://xfire.codehaus.org/config/1.0">
<service>
<name>hrwebservice</name>
<namespace>com.channelsoft.hr</namespace>
<serviceClass>com.channelsoft.hr.webservice.DepartmentAndPersonInfo</serviceClass>
<implementationClass>com.channelsoft.hr.webservice.impl.DepartmentAndPersonInfoImpl</implementationClass>
<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">
                            com.channelsoft.hr.wssecurity.PasswordHandler//回调类
                        </prop>                    </props>
                </property>
            </bean>
    </inHandlers>
</service>
</beans>

四、客户端

 

2、客户端调用

package hr;
import java.net.MalformedURLException;
import org.codehaus.xfire.client.Client;
import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.security.wss4j.WSS4JOutHandler;
import org.apache.ws.security.WSConstants;
import org.apache.ws.security.handler.WSHandlerConstants;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;
import org.codehaus.xfire.transport.http.CommonsHttpMessageSender;
import org.codehaus.xfire.util.dom.DOMOutHandler;import com.channelsoft.hr.webservice.DepartmentAndPersonInfo;
public class getHRInfo
{
public static void main(String args[])
{ 
   String serviceURL = "http://localhost:8080/HRWebService/services/hrwebservice";
   // 创建service对象
   Service serviceModel = new ObjectServiceFactory().create(DepartmentAndPersonInfo.class);
  
   XFireProxyFactory serviceFactory = new XFireProxyFactory();   try
   {
    // 获取服务对象
    DepartmentAndPersonInfo service = (DepartmentAndPersonInfo) serviceFactory.create(serviceModel, serviceURL);
   
    // 忽略http连接的超时时间,0为不设置超时时间,》=1为超时毫秒数
    Client client = Client.getInstance(service);
    client.setProperty(CommonsHttpMessageSender.HTTP_TIMEOUT, "0");
    //发送授权信息
//      client.addOutHandler(new ClientAuthenticationHandler("abcd","1234"));//      //WS-Security
      WSS4JOutHandler wsOut = new WSS4JOutHandler(); 
      String actions =WSHandlerConstants.USERNAME_TOKEN; 
         wsOut.setProperty(WSHandlerConstants.ACTION, actions);//动作
         wsOut.setProperty(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PASSWORD_DIGEST);//密码类型
         wsOut.setProperty(WSHandlerConstants.USER, "server");   //指定用户     
         wsOut.setProperty(WSHandlerConstants.PW_CALLBACK_CLASS, PasswordHandler.class.getName());//密码回调类
        
         client.addOutHandler(new DOMOutHandler());
         client.addOutHandler(wsOut);       
      
      
    // 调用服务
    String hello = service.queryDepartmentInfo();
    String hello2 = service.queryPersonnelInfo("", "", "");
    System.out.println(hello);
    System.out.println(hello2);   }
   catch (MalformedURLException e)
   { 
    System.out.println("错误!!!");
    e.printStackTrace();
   }
}
}


标签:web,String,Service,xfire,Xfire,org,import,security,codehaus
From: https://blog.51cto.com/u_16112859/6320526

相关文章

  • 深入理解Spring MVC:Java Web 开发的强大框架
    简介:SpringMVC是一个基于Java的开源Web应用框架,它提供了一种基于模型-视图-控制器(Model-View-Controller)设计模式的开发方式。它是Spring框架的一部分,用于构建高度可扩展的Web应用程序。本博客将深入探讨SpringMVC的核心概念和特性,以及如何使用它构建灵活、可维护的......
  • webpack-指定webpack的entry和output
    webpack中的默认约定在webpack4.x和5.x的版本中,有如下的默认约定:默认的打包入口文件为src->index.js默认的输出文件路径为dist->main.js注意:可以在webpack.config.js中修改打包的默认约定自定义打包的入口和出口在webpack.config.js配置文件中,通过entry节点指定打包的入口......
  • WEB—漏洞必懂知识点
     CTF,SRC,红蓝对抗,实战等SRC:针对与网站上面的漏洞,进行提交漏洞并证实可以获得相应的佣金。偏向于实战,重点掌握获取网站权限 漏洞等级划分高危:SQL注入,文件上传,文件包含,代码执行,未授权访问——直接影响到网站权限和数据库权限,能够直接获取数据或者获取到一些敏感信息只要涉......
  • JavaWeb中Filter&Listener的神奇作用
    @[toc]1,Filter1.1Filter概述Filter表示过滤器,是JavaWeb三大组件(Servlet、Filter、Listener)之一。过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能。如下图所示,浏览器可以访问服务器上的所有的资源(servlet、jsp、html等)而在访问到这些资源之前可以使过滤器拦截来下,......
  • Exp8 Web安全
    目录一、实践目标1.Web前端HTML2.Web前端javascipt3.Web后端:MySQL基础4.Web后端5.最简单的SQL注入,XSS攻击测试6.选做Webgoat或类似平台的SQL注入、XSS、CSRF攻击各一例。二、实践步骤1.Web1.1Web前端HTML1.2Web前端:javascript1.3Web后端:MySQL基础1.4Web后端:编写PHP网页,连接......
  • 基于 HTML5 WebGL 的垃圾分类系统
    前言垃圾分类,一般是指按一定规定或标准将垃圾分类储存、分类投放和分类搬运,从而转变成公共资源的一系列活动的总称。分类的目的是提高垃圾的资源价值和经济价值,力争物尽其用。垃圾在分类储存阶段属于公众的私有品,垃圾经公众分类投放后成为公众所在小区或社区的区域性准公共资源,垃圾......
  • HTML5 + WebGL 实现的垃圾分类系统
    前言垃圾分类,一般是指按一定规定或标准将垃圾分类储存、分类投放和分类搬运,从而转变成公共资源的一系列活动的总称。分类的目的是提高垃圾的资源价值和经济价值,力争物尽其用。垃圾在分类储存阶段属于公众的私有品,垃圾经公众分类投放后成为公众所在小区或社区的区域性准公共资源,垃圾......
  • 基于 HTML5 + WebGL 实现的垃圾分类系统
    前言垃圾分类,一般是指按一定规定或标准将垃圾分类储存、分类投放和分类搬运,从而转变成公共资源的一系列活动的总称。分类的目的是提高垃圾的资源价值和经济价值,力争物尽其用。垃圾在分类储存阶段属于公众的私有品,垃圾经公众分类投放后成为公众所在小区或社区的区域性准公共资源,垃圾......
  • web标准开发-ppt讲义
    Web标准开发优点}使Web页面的结构(html/Xhtml/xml)、表现(css)、行为(javascipt)分离;}使web页面可以适应当前所有流行的浏览器(甚至是手机上的浏览器);}Web页面整洁和简......
  • GO web 学习(三)
    路由Controller/Router角色main():设置类工作controller:静态资源把不同的请求送到不同的controller进行处理它会根据请求,匹配最具体的handler路由参数静态路由:一个路径对应一个页面/home/about带参数的路由:根据路由参数,创建出一族不同的页面/companies......