﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-czmchen-随笔分类-web service</title><link>http://www.blogjava.net/czmchen/category/43597.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 15 Jan 2010 02:08:35 GMT</lastBuildDate><pubDate>Fri, 15 Jan 2010 02:08:35 GMT</pubDate><ttl>60</ttl><item><title>让xfire的ws-security跑起来</title><link>http://www.blogjava.net/czmchen/archive/2010/01/15/309638.html</link><dc:creator>陈周敏</dc:creator><author>陈周敏</author><pubDate>Fri, 15 Jan 2010 01:51:00 GMT</pubDate><guid>http://www.blogjava.net/czmchen/archive/2010/01/15/309638.html</guid><wfw:comment>http://www.blogjava.net/czmchen/comments/309638.html</wfw:comment><comments>http://www.blogjava.net/czmchen/archive/2010/01/15/309638.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/czmchen/comments/commentRss/309638.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/czmchen/services/trackbacks/309638.html</trackback:ping><description><![CDATA[由于开发的需要，要用到xfire，对于开发我比较关心的是安全和速度！所以就找了xfire中的ws-security，利用它的安全证书和key，安全足够了<br />
<br />
先到网上下载最新版的xfire,一般都去官方网站下载，了解下详情！其官网为<a href="http://xfire.codehaus.org">http://xfire.codehaus.org</a><br />
现在最新版为1.2.6,把<a href="http://repository.codehaus.org/org/codehaus/xfire/xfire-all/1.2.6/xfire-all-1.2.6.jar" class="external-link">xfire-all-1.2.6.jar</a> 和 <a href="http://repository.codehaus.org/org/codehaus/xfire/xfire-distribution/1.2.6/xfire-distribution-1.2.6.zip" class="external-link"> xfire-distribution-1.2.6.zip</a>下载<br />
<br />
准备前，先看看ws-securitye的步骤，在<a href="http://xfire.codehaus.org/WS-Security">http://xfire.codehaus.org/WS-Security</a>里面可以看到，它提示我们installed Unlimited Strength Jurisdiction Policy Files，我就在<strong><a href="http://java.sun.com/j2se/1.5.0/download.jsp">http://java.sun.com/j2se/1.5.0/download.jsp</a></strong>里面下载两个包，因为我安装的是jdk1.6最新版，在<strong><a href="http://java.sun.com/j2se/1.5.0/download.jsp">http://java.sun.com/j2se/1.5.0/download.jsp</a></strong>最下面的Other Downloads的Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 5.0，点击下载，下载下来后，按照里面的步骤，把这两个jar放到<br />
Java/jre6/lib/security里面，修改java.security，把<br />
security.provider.6=com.sun.security.sasl.Provider改为<br />
security.provider.6=org.bouncycastle.jce.provider.BouncyCastleProvider<br />
其效果为<br />
security.provider.1=sun.security.provider.Sun<br />
security.provider.2=sun.security.rsa.SunRsaSign<br />
security.provider.3=com.sun.net.ssl.internal.ssl.Provider<br />
security.provider.4=com.sun.crypto.provider.SunJCE<br />
security.provider.5=sun.security.jgss.SunProvider<br />
security.provider.6=org.bouncycastle.jce.provider.BouncyCastleProvider<br />
#security.provider.6=com.sun.security.sasl.Provider<br />
security.provider.7=org.jcp.xml.dsig.internal.dom.XMLDSigRI<br />
security.provider.8=sun.security.smartcardio.SunPCSC<br />
security.provider.9=sun.security.mscapi.SunMSCAPI<br />
<br />
<br />
<br />
准备工作做好后，解压xfire-distribution-1.2.6.zip，然后你会看到xfire-1.2.6这个文件夹，进去，你会看到有个examples文件夹，再进去，你就发现很多demo啦，在这里就找到了ws-security的demo<br />
<br />
启动Myeclipse，看到里面的.classpath和.project文件，这个是eclipse的项目!用myeclipse打开，你发现都不正确，这些错误我就不理！<br />
<br />
新建一个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也加入到项目中。整个项目的结构为：<br />
<img src="http://www.blogjava.net/images/blogjava_net/czmchen/22.jpg" alt="" border="0" /><br />
<br />
<br />
生成key：在ws-security根目录下有个keys的文件夹，双击进去，运行generateServerKey.bat，将默认的key生成。里面的参数让你们研究，很好用（上面我跳过不安装j2se1.4就是因为有这个）！生成后，将serverKey.rsa和serverStore.jks扔到META-INF\xfire下，有个相同的那就替换，clientStore.jks同理<br />
<br />
修改服务器参数：在org.codehaus.xfire.client下的BookClient.java,把变量SERVICE_NAMESPACE的值改为<br />
http://localhost:端口号/上下文路径/BookService,下面的都同理。要修改到的文件META-INF\xfire下的services.xml。记得把http://xfire.codehaus.org修改为http://localhost:端口号/上下文路径/BookService。因为http://xfire.codehaus.org不开放那些接口<br />
<br />
<br />
修改完毕后，把项目部署到tomcat,启动服务器后，org.codehaus.xfire.client下运行BookClientEnc.java<br />
。运行后会报下面的错误<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">Running&nbsp;client&nbsp;:&nbsp;Encryption&nbsp;Client<br />
Looking&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;isbn&nbsp;:&nbsp;</span><span style="color: #000000;">0123456789</span><span style="color: #000000;">&nbsp;<img src="http://www.blogjava.net/Images/dot.gif" alt="" />.Exception&nbsp;in&nbsp;thread&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">main</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;java.lang.NoClassDefFoundError:&nbsp;org</span><span style="color: #000000;">/</span><span style="color: #000000;">apache</span><span style="color: #000000;">/</span><span style="color: #000000;">xml</span><span style="color: #000000;">/</span><span style="color: #000000;">utils</span><span style="color: #000000;">/</span><span style="color: #000000;">URI$MalformedURIException<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.ws.security.message.WSSecEncrypt.doEncryption(WSSecEncrypt.java:</span><span style="color: #000000;">407</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.ws.security.message.WSSecEncrypt.doEncryption(WSSecEncrypt.java:</span><span style="color: #000000;">399</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.ws.security.message.WSSecEncrypt.encryptForInternalRef(WSSecEncrypt.java:</span><span style="color: #000000;">306</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.ws.security.message.WSSecEncrypt.build(WSSecEncrypt.java:</span><span style="color: #000000;">264</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.ws.security.action.EncryptionAction.execute(EncryptionAction.java:</span><span style="color: #000000;">62</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.ws.security.handler.WSHandler.doSenderAction(WSHandler.java:</span><span style="color: #000000;">192</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.codehaus.xfire.security.wss4j.WSS4JOutHandler.invoke(WSS4JOutHandler.java:</span><span style="color: #000000;">158</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:</span><span style="color: #000000;">131</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.codehaus.xfire.client.Invocation.invoke(Invocation.java:</span><span style="color: #000000;">79</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.codehaus.xfire.client.Invocation.invoke(Invocation.java:</span><span style="color: #000000;">114</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.codehaus.xfire.client.Client.invoke(Client.java:</span><span style="color: #000000;">336</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.codehaus.xfire.client.XFireProxy.handleRequest(XFireProxy.java:</span><span style="color: #000000;">77</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.codehaus.xfire.client.XFireProxy.invoke(XFireProxy.java:</span><span style="color: #000000;">57</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;$Proxy0.findBook(Unknown&nbsp;Source)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.codehaus.xfire.client.BookClient.executeClient(BookClient.java:</span><span style="color: #000000;">63</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.codehaus.xfire.client.BookClientEnc.main(BookClientEnc.java:</span><span style="color: #000000;">23</span><span style="color: #000000;">)<br />
Caused&nbsp;by:&nbsp;java.lang.ClassNotFoundException:&nbsp;org.apache.xml.utils.URI$MalformedURIException<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.net.URLClassLoader$</span><span style="color: #000000;">1</span><span style="color: #000000;">.run(Unknown&nbsp;Source)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.security.AccessController.doPrivileged(Native&nbsp;Method)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.net.URLClassLoader.findClass(Unknown&nbsp;Source)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.lang.ClassLoader.loadClass(Unknown&nbsp;Source)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;sun.misc.Launcher$AppClassLoader.loadClass(Unknown&nbsp;Source)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.lang.ClassLoader.loadClass(Unknown&nbsp;Source)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.lang.ClassLoader.loadClassInternal(Unknown&nbsp;Source)<br />
&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.blogjava.net/Images/dot.gif" alt="" />&nbsp;</span><span style="color: #000000;">16</span><span style="color: #000000;">&nbsp;more<br />
</span></div>
<br />
这是因为你还没把xalan.jar加入去，到<a href="http://www.apache.org/dyn/closer.cgi/xml/xalan-j">http://www.apache.org/dyn/closer.cgi/xml/xalan-j</a> 下载最新版<br />
，现在最新去到2_7_1，找到xalan-j_2_7_1-bin.zip，把其下载后，添加xalan.jar到项目<br />
<br />
再运行，如果出现下面的结果，那就正常啦<br />
Running client : Encryption Client<br />
Looking for isbn : 0123456789 ....Using XFire : Dan Diephouse<br />
<br />
<br />
我的做好的示例文件在<a href="http://www.blogjava.net/Files/czmchen/ws-security.rar">http://www.blogjava.net/Files/czmchen/ws-security.rar</a>可以下载，下载后要做的事情就是把jar按上面的方法加进去，因为jar太大了，上传不上！还有要改下tomcat的端口为8001，再部署项目<br />
<br />
<a href="http://repository.codehaus.org/org/codehaus/xfire/xfire-distribution/1.2.6/xfire-distribution-1.2.6.zip" class="external-link"></a>
<img src ="http://www.blogjava.net/czmchen/aggbug/309638.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/czmchen/" target="_blank">陈周敏</a> 2010-01-15 09:51 <a href="http://www.blogjava.net/czmchen/archive/2010/01/15/309638.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>