上海减量化:wss4j

来源:百度文库 编辑:中财网 时间:2024/04/28 15:52:29

Wss4j的学习----这是我第一次写东西。因为,我实在是发现了分享知识的重要性。因为现在的学习基本都是靠百度,google了。呵呵。进入正题。

简单说明:wss4j是,axis的实现WS-Wecurity安全机制的一个框架。具备知识:java和axis知识。运行环境:至少可以跑起来一个axis的程序。哪怕是一个helloworld。必须的包:wss4j.jar官方地址:http://ws.apache.org/wss4j/。工作原理:我用一张图来说明一切,你会明白的。

  

是不是非常明白?为了方便学习,我下载的是wss4j-bin-1.5.3.zip这个版本,因为里面有自带的几个例子。我来叫你跑起这些例子便于学习。一步一步教你跑起这些例子:  1. 解压wss4j-bin-1.5.3.zip到wss4j文件夹。看到  一个比较简单的例子在samples里,复杂一点的例子在interop里。我们先来进行简单的例子。  2. 在eclipse里建个新的项目,我这里叫做“testwss4j”,建包,和类和官方文件夹相同:主要的文件说明:        org.apache.axis.samples.wssec.doall.axisSec包:            是目标服务器端程序。是org.apache.axis.samples.wssec.doall包里的sec.wsdl文件生成(生成方法见axis学习文档)的。       org.apache.axis.samples.wssec.doall包:            PWCallback.java文件是,headler对xml文件进行签名,加密,解密的类。            Tester.java是客户端测试类。            Client_deploy.wsdd文件是,客户端签名,加密的配置文件。3. 主要类说明        除了PWCallback.java是wss4j.jar中的应用,其他类均为axis的应用。不做过多说明。      PWCallback.java说明:41到46行的说明是指,这里是给已经加入了user或者keystore alias的soap消息加入或者密码。可以是identifier的形式也可以是直接设置密码。由于是例子,这里是最简单的给一个user加入一个最简单的密码。4. 运行例子       运行例子之前会发现项目会有很多错误,用你习惯的方式导入项目testwss4j所需要的包。包括axis的所有包和wss4j.jar。我的包的列表:如果没有错误,首先启动服务器,发布目标服务器程序。如果一切顺利 可以run as java applicationà org.apache.axis.samples.wssec.doallTester.java。会得到如下结果:如果你在PWCallback.java加入断点就会发现,根本没有调用加密程序。不过得到结果至少知道这个程序是畅通的。下面我们开始加密。没有加密的config-deploy.wsdd的配置文件中SecHttp的服务配置为:加入加密配置文件之后为:注意红色框的位置为加密的配置。说明,目标服务器端接收的soap消息必须是加密的。重启服务器,允许Tester.java就会发现报错:说明你的配置完全正确,因为请求没有加密所以报错。修改Tester.java:红色框中为修改的部分。注意client_deploy.wsdd的地址位置要用“//”分割。重启服务器,运行Tester.java就会得到刚刚的结果了。如果加入断点就会进入方法。5.复杂例子。 在interop文件夹下:ping.wsdl是服务器接口描述文件。org文件下包括服务器接口的测试类。也包括服务器接口,但是,直接在eclipse里打开会有很多错误,我因为懒得改正错误,所以用ping.wsdl从新生成了服务器端接口,在axis的学习里就有。但是生成之后就会发现一个问题,本身服务器接口的包是org.apache.ws.axis.oasis.ping,服务器接口的类在这个包下,如果用文件夹里的ping.wsdl生成的包为org.xmlsoap .Ping,所以服务器接口都在这个包下。直接放在项目里就会发现很多关于包的错误。为了和原始包保持一直的思想,修改ping.wsdl,生成包org.apache.ws.axis.oasis.ping。修改了三个地方: 第5行:xmlns:tns=http://xmlsoap.org/Ping修改为xmlns:tns=http://oasis.axis.ws.apache.org/ping第9行:targetNamespace=http://xmlsoap.org/Ping 修改为:targetNamespace="http://oasis.axis.ws.apache.org/ping"第12行:修改为http://oasis.axis.ws.apache.org/ping">其他地方没有做改动覆盖原来的服务器接口。项目中的包都按照org.apache.ws.axis.oasis.ping这个包的形式修改。导入项目后如图发布服务器端接口,等工作不再缀述。 这个项目给了页面测试,现在把页面也导入到项目里。按照原有文件夹的形式,在项目下新建文件夹webapps导入文件如图:页面interop.jsp是项目ping的测试页面。如果测试通过页面如下:我的本地测试端口为7070。Tomcat默认是8080。7个按钮,7个不同等级的安全身份验证。第1个和上面简单的例子是一样。我只介绍一个稍微复杂的第3个端口。发生请求和返回请求都加入身份验证,并且是jks证书验证。wss4j2.jsp页面需要修改,原始文件没有加入wss4j验证,包的引入也需要修改。修改部分如下:其他部分没有修改。 由于只测试接口3,服务名为Ping3,为服务器端加入wss4j验证,修改服务器端配置文件(server-congig.wsdd)为:红色框:为服务器端解密并验证签名。验证签名的配置文件为test.properties(官方给出配置文件为wsstest.proterties)。这个文件默认放在classes文件夹下才可以找到(应该可以修改位置)。验证签名的类为:org.apache.ws.axis.oasis.PWCallback1。如何验证见这个类。黄色框:       为服务器端返回客户端时候对消息的签名配置。配置文件和接收请求的相同。因为是服务器端向客户端请求,所以请求用户名为“server”,接收端用户名为“client”。最后一行属性为,签名加密的算法。修改客户端配置文(Client_deploy.wsdd)红色框:        为向服务器端签名加密申请,申请用户名为client,接收服务器为server。和服务器端请求返回基本相同。黄色框:       和服务器端接收请求基本相同。在客户端也放上配置文件,test.properties(官方给出配置文件为wsstest.proterties)。如果没有问题,可以启动服务器,运行程序。选择interop3的按钮。会发现出现错误:WSHandler:Encryption: error during message processingorg.apache.ws.security.WSSecurityException: An unsupported signature or encryption algorithm was used (unsupported key transport encryption algorithm: No such algorithm: http://www.w3.org/2001/04/xmlenc#rsa-1_5)。查了资料发现需要一个包:bcprov-jdk15-138.jar。为什么需要,我没有研究,但是加入之后就没有错误了。可以顺利通过,结果为:Interop2.jks是用keytool工具生成的,我会另做说明。 Wss4j的应用就是这样