让xfire ws-security跑起来

由于开发的需要,要用到xfire,对于开发我比较关心的是安全和速度!所以就找了xfire中的ws-security,利用它的安全证书和key,安全足够了

先到网上下载最新版的xfire,一般都去官方网站下载,了解下详情!其官网为http://xfire.codehaus.org
现在最新版为1.2.6,把xfire-all-1.2.6.jar 和 xfire-distribution-1.2.6.zip 下载

准备前,先看看ws-securitye的步骤,在http://xfire.codehaus.org/WS-Security 里面可以看到,它提示我们installed Unlimited Strength Jurisdiction Policy Files,我就在http://java.sun.com/j2se/1.5.0/download.jsp 里面下载两个包,因为我安装的是jdk1.6最新版,在http://java.sun.com/j2se/1.5.0/download.jsp 最 下面的Other Downloads的Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 5.0,点击下载,下载下来后,按照里面的步骤,把这两个jar放到
Java/jre6/lib/security里面,修改java.security,把
security.provider.6=com.sun.security.sasl.Provider改为
security.provider.6=org.bouncycastle.jce.provider.BouncyCastleProvider
其效果为
security.provider.1=sun.security.provider.Sun
security.provider.2=sun.security.rsa.SunRsaSign
security.provider.3=com.sun.net.ssl.internal.ssl.Provider
security.provider.4=com.sun.crypto.provider.SunJCE
security.provider.5=sun.security.jgss.SunProvider
security.provider.6=org.bouncycastle.jce.provider.BouncyCastleProvider
#security.provider.6=com.sun.security.sasl.Provider
security.provider.7=org.jcp.xml.dsig.internal.dom.XMLDSigRI
security.provider.8=sun.security.smartcardio.SunPCSC
security.provider.9=sun.security.mscapi.SunMSCAPI



准备工作做好后,解压xfire-distribution-1.2.6.zip,然后你会看到xfire-1.2.6这个文件夹,进去,你会看到有个examples文件夹,再进去,你就发现很多demo啦,在这里就找到了ws-security的demo

启动Myeclipse,看到里面的.classpath和.project文件,这个是eclipse的项目!用myeclipse打开,你发现都不正确,这些错误我就不理!

新建一个Web Progect项目,项目名随你命名。设置下该项目,点击该项目,右键,properties,找到Java Compiler,修改项目的jdk为1.5以上(里面用到的有注入)!解压xfire-distribution-1.2.6.zip,进入ws- security文件夹下,进入src下,再进入main的文件夹,把里面的文件全部都拷贝到你新建的项目的src下。点中该项目,右键,新建 Source Folder,命名为test。后退,找到test的文件夹,把里面的文件全部拷贝到项目test的文件夹下。后退,再把web-inf里面的 web.xml拷贝到项目里面,替换。最后在项目中加入jar,在xfire-1.2.6根文件夹下面有个lib,把这些lib全部放到项目的web- inf下的lib文件夹中,把xfire-all-1.2.6.jar也加入到项目中。整个项目的结构为:
让xfire ws-security跑起来_第1张图片


生成key:在ws-security根目录下有个keys的文件夹,双击进去,运行generateServerKey.bat,将默认的key生成。 里面的参数让你们研究,很好用(上面我跳过不安装j2se1.4就是因为有这个)!生成后,将serverKey.rsa和 serverStore.jks扔到META-INF/xfire下,有个相同的那就替换,clientStore.jks同理

修改服务器参数:在org.codehaus.xfire.client下的BookClient.java,把变量SERVICE_NAMESPACE的值改为
http://localhost:端口号/上下文路径/BookService,下面的都同理。要修改到的文件META-INF/xfire下的 services.xml。记得把http://xfire.codehaus.org修改为http://localhost:端口号/上下文路径 /BookService。因为http://xfire.codehaus.org不开放那些接口


修改完毕后,把项目部署到tomcat,启动服务器后,org.codehaus.xfire.client下运行BookClientEnc.java
。运行后会报下面的错误

Running client : Encryption Client
Looking 
for  isbn :  0123456789   .Exception in thread  " main "  java.lang.NoClassDefFoundError: org / apache / xml / utils / URI$MalformedURIException
    at org.apache.ws.security.message.WSSecEncrypt.doEncryption(WSSecEncrypt.java:
407 )
    at org.apache.ws.security.message.WSSecEncrypt.doEncryption(WSSecEncrypt.java:
399 )
    at org.apache.ws.security.message.WSSecEncrypt.encryptForInternalRef(WSSecEncrypt.java:
306 )
    at org.apache.ws.security.message.WSSecEncrypt.build(WSSecEncrypt.java:
264 )
    at org.apache.ws.security.action.EncryptionAction.execute(EncryptionAction.java:
62 )
    at org.apache.ws.security.handler.WSHandler.doSenderAction(WSHandler.java:
192 )
    at org.codehaus.xfire.security.wss4j.WSS4JOutHandler.invoke(WSS4JOutHandler.java:
158 )
    at org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:
131 )
    at org.codehaus.xfire.client.Invocation.invoke(Invocation.java:
79 )
    at org.codehaus.xfire.client.Invocation.invoke(Invocation.java:
114 )
    at org.codehaus.xfire.client.Client.invoke(Client.java:
336 )
    at org.codehaus.xfire.client.XFireProxy.handleRequest(XFireProxy.java:
77 )
    at org.codehaus.xfire.client.XFireProxy.invoke(XFireProxy.java:
57 )
    at $Proxy0.findBook(Unknown Source)
    at org.codehaus.xfire.client.BookClient.executeClient(BookClient.java:
63 )
    at org.codehaus.xfire.client.BookClientEnc.main(BookClientEnc.java:
23 )
Caused by: java.lang.ClassNotFoundException: org.apache.xml.utils.URI$MalformedURIException
    at java.net.URLClassLoader$
1 .run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClassInternal(Unknown Source)
      
16  more


这是因为你还没把xalan.jar加入去,到http://www.apache.org/dyn/closer.cgi/xml/xalan-j 下载最新版
,现在最新去到2_7_1,找到xalan-j_2_7_1-bin.zip,把其下载后,添加xalan.jar到项目

再运行,如果出现下面的结果,那就正常啦
Running client : Encryption Client
Looking for isbn : 0123456789 ....Using XFire : Dan Diephouse


我的做好的示例文件在http://download.csdn.net/source/1996101 可以下载,下载后要做的事情就是把jar按上面的方法加进去,因为jar太大了,上传不上!还有要改下tomcat的端口为8001,再部署项目

你可能感兴趣的:(让xfire ws-security跑起来)