• 推荐
  • 评论
  • 收藏

寻找开源项目让ksoap支持wsse加密的soap报文

2023-01-31    8501次浏览

前言

     什么时候开始接触开源这个词呢?貌似,是某老师一直有提,但是,一直没有教我们如何参与开源项目,哎..估计大学老师都这样子了.后来,学习如何使用cvs,svn,git,mercurial等等工具以后,终于,了解开源项目的整个管理以及参与的流程,走了不少弯路,不过,弄懂了还算不错.在我学会使用版本控制器以及,那些网站提供开源服务,还有那些开源的项目如何下载的时候,曾经尝试过在学校开展一下开源项目活动,利用code google 进行代码的管理,google小组进行讨论,gmail进行交流,可惜的是,到最后,大家连个svn都用不好,最后,不了了之.我后来思考了一下,造成这样的原因,首先,大家对于新鲜事物的接受能力不强,他们对于协同工作的理解是用U盘把代码拷来拷去方便直接.不愿意学习什么是版本号,什么是版本分支,什么是合并,以及如何解决代码冲突,觉得还不如用U盘直接拷代码来得方便.其次,就是老师,连老师都不会赖得教版本管理,也就只有等我们出去工作的时候才知道有这么一样东西,白白浪费了最重要大学那几年学习开源项目的黄金时间.

寻找开源项目

   一般而言,我们都是在我们使用某技术以后一段时间,才发现原来是开源的,然后,才去下载.有些开源软件有自己搭建的服务器,不过,对于,大部分开源项目都是使用专门的托管网站进行管理.所以,高效的寻找那些开源项目,了解有那些项目托管网站就非常必须

Code Google

  支持的版本控制器   使用友好度
SVN Git Mercurial  
支持 支持 支持 ★★★★★

在这么多的项目托管网站中,我个人感觉,code google是最简单,首先,它提供的丰富齐全的帮助文档,不但如此,这些帮助文档很多都有相应的中文版本,对于,那些初次接触同学来讲,实在是一个很好的学习机会,不过,有一点值得注意的是,在正常的渠道下,你是永远都获取不到项目的密码,这点,我相信学编程都知道,除了密码这点,其它都可以无障碍使用.

Souceforge

  支持的版本控制器   使用友好度
SVN Git Mercurial  
支持 支持 支持 ★★

对于,Souceforge历史,我不是很理解,只是接触的很多开源项目都使用Souceforge进行托管,Souceforge的使用相对于code google就有点复杂了,而且,文档全是英语,对于英语苦手而言实在有些难度.

Github

  支持的版本控制器   使用友好度
SVN Git Mercurial  
不支持 支持 不支持

很多知名的开源的软件都使用了Github进行托管,免费账号提供300m.不过,个人对于git不是很熟悉,就不做过多的评价.

 CodePlex

  支持的版本控制器   使用友好度
SVN Git Mercurial  
支持 不支持 支持 ★★★

微软旗下的一个项目托管网站,文档依然只有英语,不过MSDN有某些项目中文的介绍,微软的项目偏多,学习微软那些技术的同学必去的一个项目托管网站.

Codeproject

  支持的版本控制器   使用友好度
SVN Git Mercurial  
不支持 不支持 不支持

看了一下,算不上一个传统意义上的项目托管网站,因为,我注册了一个号找了很久,到找不到一个新建项目的选项,里面的开源项目的代码也找不到一个用版本控制器下载的链接.我就姑且把这个网站定位为一个用项目来进行广泛讨论的网站,因为,这个网站,更多的是讨论,还是讨论,例外还有一些教程,可以说得上是一个很好的学习网站.额外说一下.这个网站的讨论区,还提供了中国版块…

怎么都是些国外的?其实,我们中国也有类似的托管网站,例如淘宝的淘蝌蚪,盛大的Teamhost,不过,鉴于上面的项目还比较少,所有就不做过多介绍.

最后,知道有这些网站以后,还怕没有优秀的开源项目学习吗?

知道这些网站以后,你还需要一款专门的软件.

如果你是使用eclipse的可以参考我收集的eclipse下这些项目控制器的相应的插件

http://www.cnblogs.com/youxilua/archive/2011/09/27/2192913.html

闲聊一下版本控制器

  对于版本控制器的使用,都可以用来写书了,网上这部分教程也很多,这里就不做过多的介绍,下面说下我的感想.

  版本控制器可谓是入门容易,使用难,精通更是难上难.版本控制的入门,就是知道如何使用这个工具进行下载,相信这点会软件操作都会使用.但是,使用起来就有点考究了.这里的使用,是利用版本控制器,进行项目托管.如果,你是几个人开发一个软件,不想用U盘直接把代码拷来拷去这样的开发,就需要懂的用版本控制器,进行代码的管理.版本控制器的难用的地方,就在于几个人同时修改了一段代码,以及,其他人更新的时候,旧代码与新代码发生冲突等等各种蛋疼的问题,往往让一些经验不是很丰富的同学,直接放弃学习版本控制器,重新使用u盘拷来拷去.至于精通,那就是要学会如何使用各种托管网站的服务,利用这些服务,进行代码的改错,bug的追踪等等,当然,学会本地搭建服务器也是必备的技能.

前言

最近,做基于soap服务的项目,获得的一些经验性技巧,分享给大家

WSSE是什么?

传送门

http://ws.apache.org/wss4j/

支持6种不同的加密方式,不过我这里只介绍Username Token Profile 1.1

开始动手

  阅读Username Token Profile 1.1 后你会知道,我们需要在soap报文头加上什么XML结点,这里就不对XML结点进行介绍,官方文档已经介绍的很详细了.

  你已经知道了XML结点的含义以后,就继续看下去,怎么构造符合要求的password

构造password

  其实,WSSE最核心就是我们如何构造生成这个密钥,从官方文档中我们知道密钥的读取是:

Password_Digest = Base64 ( SHA-1 ( nonce + created + password ) ) 

整个密钥关键是由:随机字符串,创建时间,和真实密码构成,知道这点以后就是如何利用java 按照这个步骤生成密钥

生成算法

  这部分对于懂的人很简单,但是对于不知道的很困难,之前,我就一直死在了这块,还好有个朋友帮了我一把终于搞明白,原来在jjava下是这么简单的.

首先,要处理SHA-1算法:

在java 下实现 sha-a 算法实在简单:

1
2
MessageDigest md;
md = MessageDigest.getInstance("SHA-1");

就这样就可以完成了SHA算法的初始化,实在简单呀,之前,我还到处去找包实现,实在对Java太不了解了

生成了这么一个SHA 对象,只是开始,我们需要填充相应的值进去即可.下面要了解请认真观看

1
2
3
4
5
6
7
8
//从官方文档可以知道我们nonce还需要用这里用的是Koap自带的Base64解码一次
byte[] b1 = nonce != null ? Base64.decode(nonce) : new byte[0];
//生成字符字节流
byte[] b2 = created != null ? created.getBytes("UTF-8")
                : new byte[0];
byte[] b3 = password;
//根据我们传得值的长度生成流的长度
byte[] b4 = new byte[b1.length + b2.length + b3.length];

接下来就是根据文档拼接我们的字符串

1
2
3
4
5
//利用sha-1加密字符
md.update(b1, 0, b1.length);
md.update(b2,0,b2.length);
md.update(b3,0,b3.length);
//生成sha-1加密后的流
1
2
3
b4 = md.digest();
//生成最终的加密字符串       
String result = new String(Base64.encode(b4));

之前,花了好几个小时,在这方面的资料,最后,发现原来可以这么简单,也许是平时接触的加密等级不高所造成的吧.

原文地址:https://www.cnblogs.com/Leo_wl/p/2295543.html