51Testing丛书连载:(十二) 互联网单元测试及实践

发表于:2008-8-25 18:06

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:陈卫俊 赵璨 周磊等    来源:51Testing软件测试网

7.4.2  有WS-Security的客户端调用

  有WS-Security的Web Service调用需要配置Web Service的安全认证信息。首先需要制作证书,Java中存放证书的文件后缀名以jks结尾,即Java Key Store。每个证书有一个唯一标识,我们这里的唯一标识由证书中Issuer和Serial Number两部分组成。其中Issuer和数据库中的AppID关联。

  这里重点介绍如何制作证书,以及如何使用证书来调用WebService。

  制作证书

  1.用keygen.bat脚本生成jks密钥库,内含客户端私钥和服务端公钥,命令如下:keygen mike 123456 0001.jks 123456 0001.rsa 0001。


代码7.10  keygen.bat

01 echo alias %1

02 echo keypass %2

03 echo keystorename %3

04 echo keystorepass %4

05 echo keyname %5

06 echo cn %6

07 

08 keytool -genkey -alias %1 -keypass %2 -keystore %3 -storepass %4 -dname "cn=%6"     

    -keyalg RSA

09 keytool -selfcert -alias %1 -keystore %3 -storepass %4

10 keytool -export -alias %1 -file %5 -keystore %3 -storepass %4

  keygen参数说明:

  参数1:alias密钥别名。

  参数2:密钥密码。 

  参数3:钥匙包(库)。 

  参数4:钥匙包密码。 

  参数5:导出的公钥名称。 

  参数6:AppID。

  2.使用JDK自带的工具Keytool导入服务端公钥alisoft.rsa到isvdemo.jks。命令如下:

  Keytool -import -alias mike-file server.rsa –keystore 0001.jks -storepass 123456

  调用Web Service

  完成证书的制作后,接下来需要使用证书调用Web Service,代码如下:

代码7.11  TestWS.java

01 package com.test.api.account;

02 

03 ...

04 

05 public class TestWS {

06  private static AppConsumeServicePortType service;

07 

08  public static void main(String args[]) throws Exception {

09   connectWebService("client01.properties", "alias", "password");

10   String result = 

11    service.checkBalance("testappId", "testInstanceId", 1.0);

12   System.out.println(result);

13  }

14 

15  public static void connectWebService(String configPath, String user,

16    String password) throws MalformedURLException {

17   String serviceUrl = "http://10.0.4.138:1688/webservice/App ConsumeService";

18   XFireProxyFactory serviceFactory = new XFireProxyFactory();

19   Service serviceModel = new ObjectServiceFactory()

20     .create(AppConsumeServicePortType.class);

21   service = (AppConsumeServicePortType) serviceFactory.create(

22     serviceModel, serviceUrl);

23   setSecureProperty(service, configPath, user, password);

24  }

25 

26  public static void setSecureProperty(Object oproxy, String configPath,

27    String user, String password) {

28   Client client = ((XFireProxy) Proxy.getInvocationHandler (oproxy))

29     .getClient();

30 

31   client.addOutHandler(new DOMOutHandler());

32 

33   Properties properties = new Properties();

34   properties.setProperty(WSHandlerConstants.ACTION,

35     WSHandlerConstants.SIGNATURE);

36   properties.setProperty(WSHandlerConstants.SIG_PROP_FILE, configPath);

37   properties.setProperty(WSHandlerConstants.USER, user);

38   ClientUtPasswordHander.addPWMockDB(user, password);

39   properties.setProperty(WSHandlerConstants.PW_CALLBACK_CLASS,

40     ClientUtPasswordHander.class.getName());

41   properties.setProperty(WSHandlerConstants.SIG_KEY_ID, "IssuerSerial");

42 

43   client.addOutHandler(new WSS4JOutHandler(properties));

44  }

45 }

21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号