﻿<?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-流金De岁月-随笔分类-Jave/Webservice</title><link>http://www.blogjava.net/jinn/category/33084.html</link><description>                                                                                                                                                            Jinn's Programming Road</description><language>zh-cn</language><lastBuildDate>Fri, 18 Jul 2008 14:47:04 GMT</lastBuildDate><pubDate>Fri, 18 Jul 2008 14:47:04 GMT</pubDate><ttl>60</ttl><item><title>用Stax组装及解析XML</title><link>http://www.blogjava.net/jinn/archive/2008/07/18/215812.html</link><dc:creator>jinn</dc:creator><author>jinn</author><pubDate>Fri, 18 Jul 2008 07:13:00 GMT</pubDate><guid>http://www.blogjava.net/jinn/archive/2008/07/18/215812.html</guid><wfw:comment>http://www.blogjava.net/jinn/comments/215812.html</wfw:comment><comments>http://www.blogjava.net/jinn/archive/2008/07/18/215812.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jinn/comments/commentRss/215812.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jinn/services/trackbacks/215812.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Webservice交互中需要双方约定数据格式，用XML表示数据库记录是不错的选择。先定义个DTD:&lt;!--&nbsp;&nbsp;&nbsp;&nbsp; DTD for the Xml-Format-String used to transmit business data--&gt;&lt;!-- The "DBSET" element is the root of...&nbsp;&nbsp;<a href='http://www.blogjava.net/jinn/archive/2008/07/18/215812.html'>阅读全文</a><img src ="http://www.blogjava.net/jinn/aggbug/215812.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jinn/" target="_blank">jinn</a> 2008-07-18 15:13 <a href="http://www.blogjava.net/jinn/archive/2008/07/18/215812.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Axis中用户名、密码传递</title><link>http://www.blogjava.net/jinn/archive/2008/07/18/215750.html</link><dc:creator>jinn</dc:creator><author>jinn</author><pubDate>Fri, 18 Jul 2008 05:18:00 GMT</pubDate><guid>http://www.blogjava.net/jinn/archive/2008/07/18/215750.html</guid><wfw:comment>http://www.blogjava.net/jinn/comments/215750.html</wfw:comment><comments>http://www.blogjava.net/jinn/archive/2008/07/18/215750.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jinn/comments/commentRss/215750.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jinn/services/trackbacks/215750.html</trackback:ping><description><![CDATA[<span style="font-size: 10pt">Webservice交互经常需要验证用户，用户名和密码的传递采用<span lang="EN-US" style="font-size: 12pt; font-family: 新宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><span style="font-size: 10pt"><span lang="EN-US" style="font-family: 新宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">SOAPHeader传递不失为一种好办法。在Axis1中设置很简单：<br />
客户端：<br />
</span>((org.apache.axis.client.Call) call).addHeader(new SOAPHeaderElement("Authorization","username",username));<br />
((org.apache.axis.client.Call) call).addHeader(new SOAPHeaderElement("Authorization","password",password));<br />
<br />
</span></span></span><span style="font-size: 10pt">经包装后传递的内容如下</span><br />
&lt;soapenv:Header&gt;<br />
&nbsp;&nbsp;&lt;ns1:username<br />
&nbsp;&nbsp;&nbsp;soapenv:actor="http://schemas.xmlsoap.org/soap/actor/next"<br />
&nbsp;&nbsp;&nbsp;soapenv:mustUnderstand="0" xsi:type="soapenc:string"<br />
&nbsp;&nbsp;&nbsp;xmlns:ns1="Authorization"<br />
&nbsp;&nbsp;&nbsp;xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"&gt;<br />
&nbsp;&nbsp;&nbsp;admin<br />
&nbsp;&nbsp;&lt;/ns1:username&gt;<br />
&nbsp;&nbsp;&lt;ns2:password<br />
&nbsp;&nbsp;&nbsp;soapenv:actor="http://schemas.xmlsoap.org/soap/actor/next"<br />
&nbsp;&nbsp;&nbsp;soapenv:mustUnderstand="0" xsi:type="soapenc:string"<br />
&nbsp;&nbsp;&nbsp;xmlns:ns2="Authorization"<br />
&nbsp;&nbsp;&nbsp;xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"&gt;<br />
&nbsp;&nbsp;&nbsp;1<br />
&nbsp;&nbsp;&lt;/ns2:password&gt;<br />
&nbsp;&lt;/soapenv:Header&gt;<br />
<br />
<span style="font-size: 10pt">服务端通过Handler取得用户名和密码进行验证：</span><br />
username = (String) messageContext.getRequestMessage().getSOAPEnvelope()<br />
.getHeaderByName("Authorization","username").getValue();<br />
password = (String) messageContext.getRequestMessage().getSOAPEnvelope()<br />
.getHeaderByName("Authorization","password").getValue();<br />
<br />
<span style="font-size: 10pt">如果觉得这样不安全，可双方约定一种加密解密规则，将用户名和密码加密后进行传输。<br />
<br />
我曾试过使用如下方法，<br />
客户端：<br />
<font size="2">((org.apache.axis.client.Call) call).setUsername(username);<br />
((org.apache.axis.client.Call) call).setPassword(password);<br />
</font><br />
包装后传递内容(多了最后一句：Authorization: Basic emphZG1pbjox。Axis将用户名和密码经Base64加密后传递)：<br />
POST /web/services/GenericServer HTTP/1.0<br />
Content-Type: text/xml; charset=utf-8<br />
Accept: application/soap+xml, application/dime, multipart/related, text/*<br />
User-Agent: Axis/1.4<br />
Host: localhost:8083<br />
Cache-Control: no-cache<br />
Pragma: no-cache<br />
SOAPAction: ""<br />
Content-Length: 807<br />
Authorization: Basic emphZG1pbjox<br />
<br />
服务端的Handle:<br />
<font size="2">username =messageContext.getUsername();<br />
password = messageContext.getPassword();<br />
</font><br />
这样是没问题，看起来更简单。可惜调用部署在weblogic上的ws时，会被weblogic拦截，必须在weblogic安全域中配置相应的用户才能通过验证，这不是我们所需要的，通常我们有自己的用户管理机制，调用WS的用户也作为系统中的一个用户纳入我们的管理，而不是跟weblogic安全域用户绑在一起。<br />
<br />
</span>
 <img src ="http://www.blogjava.net/jinn/aggbug/215750.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jinn/" target="_blank">jinn</a> 2008-07-18 13:18 <a href="http://www.blogjava.net/jinn/archive/2008/07/18/215750.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>