zoukankan      html  css  js  c++  java
  • 寻找开源项目让ksoap支持wsse加密的soap报文

    前言

         什么时候开始接触开源这个词呢?貌似,是某老师一直有提,但是,一直没有教我们如何参与开源项目,哎..估计大学老师都这样子了.后来,学习如何使用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));

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

  • 相关阅读:
    JSP基础语法
    Tomcat服务器的安装及配置
    数据库连接失败出现4064错误
    错误页跳转
    Eclipse配置jstl标准标签库详解
    tomcat文件目录结构及功能介绍
    警告: [SetPropertiesRule]{Context/Loader} Setting property 'useSystemClassLoaderAsParent' to 'false' did not find a matching property.
    tomcat:A docBase * inside the host appBase has been specifi, and will be ignored
    Prim算法
    (值类型引用类型)和null的关系
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2295543.html
Copyright © 2011-2022 走看看