隨筆 - 9  文章 - 12  trackbacks - 0
          <2008年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          常用鏈接

          留言簿(2)

          隨筆檔案

          相冊(cè)

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          前些天做了一個(gè)小系統(tǒng)用到webservice, 只有客戶端  (外網(wǎng)的servcice),  公司的網(wǎng)絡(luò)環(huán)境是采用代理上網(wǎng).

          走了好多彎路才調(diào)通,    現(xiàn)在分享一下,  希望能對(duì)在這方面感到困惑的朋友有一點(diǎn)幫助.

          我采用的框架是axis2.


           //options用來(lái)包容客戶端的各種設(shè)置

           Options options = new Options();

          //設(shè)置地址
                  options.setTo(
                          new EndpointReference(address));

          //設(shè)置服務(wù)端認(rèn)證.  , 開始的時(shí)候沒有設(shè)host和domain,   認(rèn)證通不過(guò),  生成的http header 中也沒有認(rèn)證信息.  搞了好半天才發(fā)現(xiàn)必須設(shè)置主機(jī)和域名(服務(wù)器端的)
                  HttpTransportProperties.Authenticator auth=new HttpTransportProperties.Authenticator();
                  auth.setUsername("Administrator");
                  auth.setPassword("2222");
                  auth.setHost("test.xxx.com");
                  auth.setDomain("test.xxxx.com");

                  options.setProperty(HTTPConstants.AUTHENTICATE, auth);
           
                  options.setAction("Execute");
                  
          //必須設(shè)置http version為1.0,  這樣客戶端的代理屬性才起作用.
                  options.setProperty(HTTPConstants.HTTP_PROTOCOL_VERSION,
                     HTTPConstants.HEADER_PROTOCOL_10);

                  //proxy settings
                  ProxyProperties proxyProperties=new ProxyProperties();
                  proxyProperties.setProxyName("PROXYSERVER");
                  proxyProperties.setProxyPort(8080);
                  proxyProperties.setUserName("luyanbo");
                  proxyProperties.setPassWord("sand");
                  proxyProperties.setDomain("sand.cn");
                 
                  options.setProperty(HTTPConstants.PROXY, proxyProperties);
              
                  ServiceClient servicClient = new ServiceClient();
                  servicClient.setOptions(options);
                  
          //發(fā)送并接收
                  OMElement result = servicClient.sendReceive(getAuthXml());

          用的過(guò)程中, 發(fā)現(xiàn)axis2的文檔實(shí)在太粗略了, 很多不該省略的地方也省了,  像代理屬性設(shè)置里面,  http版本的設(shè)置就沒有提到. 可能他們也是發(fā)揚(yáng)風(fēng)格. 怎么省事怎么來(lái)的吧

          posted on 2007-09-24 18:30 人生如戲 閱讀(3893) 評(píng)論(6)  編輯  收藏

          FeedBack:
          # re: axis2連接屬性設(shè)置 2007-09-30 11:48 Bryan
          你好,有幾個(gè)問(wèn)題想請(qǐng)教一下:
          1 服務(wù)端你是用TOMCAT吧,怎樣設(shè)置才能使客戶端訪問(wèn)webservice的時(shí)候必須使用用戶認(rèn)證?能否給個(gè)例子
          2 客戶端設(shè)置的用戶名,服務(wù)端應(yīng)該怎么做才能取到?

          謝謝  回復(fù)  更多評(píng)論
            
          # re: axis2連接屬性設(shè)置 2007-10-04 17:35 人生如戲
          容器管理驗(yàn)證方法控制著當(dāng)用戶訪問(wèn)受保護(hù)的web應(yīng)用資源時(shí),如何進(jìn)行用戶的身份鑒別。當(dāng)一個(gè)web應(yīng)用使用了Basic Authentication(BASIC參數(shù)在web.xml文件中auto-method元素中設(shè)置),而有用戶訪問(wèn)受保護(hù)的web應(yīng)用時(shí),Tomcat將通過(guò)HTTP Basic Authentication方式,彈出一個(gè)對(duì)話框,要求用戶輸入用戶名和密碼。在這種驗(yàn)證方法中,所有密碼將被以64位的編碼方式在網(wǎng)絡(luò)上傳輸。

          注意:使用Basic Authentication通過(guò)被認(rèn)為是不安全的,因?yàn)樗鼪]有強(qiáng)健的加密方法,除非在客戶端和服務(wù)器端都使用HTTPS或者其他密碼加密碼方式(比如,在一個(gè)虛擬私人網(wǎng)絡(luò)中)。若沒有額外的加密方法,網(wǎng)絡(luò)管理員將能夠截獲(或?yàn)E用)用戶的密碼。但是,如果你是剛開始使用Tomcat,或者你想在你的web應(yīng)用中測(cè)試一下基于容器的安全管理,Basic Authentication還是非常易于設(shè)置和使用的。只需要添加<security-constraint>和<login-config> 兩個(gè)元素到你的web應(yīng)用的web.xml文件中,并且在CATALINA_BASE/conf/tomcat-users.xml 文件中添加適當(dāng)?shù)?lt;role>和<user>即可,然后重新啟動(dòng)Tomcat。

          下面例子中的web.xml摘自一個(gè)俱樂(lè)部會(huì)員網(wǎng)站系統(tǒng),該系統(tǒng)中只有member目錄被保護(hù)起來(lái),并使用Basic Authentication進(jìn)行身份驗(yàn)證。。

          <!--
          Define the Members-only area, by defining
          a "Security Constraint" on this Application, and
          mapping it to the subdirectory (URL) that we want
          to restrict.
          -->
          <security-constraint>
          <web-resource-collection>
          <web-resource-name>
          Entire Application
          </web-resource-name>
          <url-pattern>/members/*</url-pattern>
          </web-resource-collection>
          <auth-constraint>
          <role-name>member</role-name>
          </auth-constraint>
          </security-constraint>
          <!-- Define the Login Configuration for this Application -->
          <login-config>
          <auth-method>BASIC</auth-method>
          <realm-name>My Club Members-only Area</realm-name>
          </login-config>

          說(shuō)明: <url-pattern>/members/*</url-pattern> 指定受保護(hù)的資源的url pattern

          <auth-constraint>
          <role-name>member</role-name>
          </auth-constraint>
          指定訪問(wèn)需要的角色, 需要在tomcat-users.xml里添加 member 角色 , 和自己指定的用戶名, 密碼。


          至于客戶端的輸入的用戶名密碼, 由容器來(lái)處理, 不需程序控制
            回復(fù)  更多評(píng)論
            
          # re: axis2連接屬性設(shè)置 2007-10-08 13:40 Bryan
          @人生如戲
          謝謝你的回答。

          關(guān)于第二個(gè)問(wèn)題,我其實(shí)是想在我提供的web service程序里去獲取已經(jīng)被驗(yàn)證通過(guò)的用戶名,不知道Axis2里面有沒有這樣的api?  回復(fù)  更多評(píng)論
            
          # re: axis2連接屬性設(shè)置 2007-10-16 13:16 人生如戲
          這個(gè)我也不清楚  回復(fù)  更多評(píng)論
            
          # re: axis2連接屬性設(shè)置 2007-12-28 10:09 a-moon
          1:如果我想在服務(wù)器端取到客戶端soap里面的http頭信息怎么取啊?
          2:如果我想在客戶端設(shè)置http頭content-type 怎么設(shè)置啊?
          .....請(qǐng)指教...  回復(fù)  更多評(píng)論
            
          # re: axis2連接屬性設(shè)置[未登錄] 2008-05-13 15:56 sunshine
          ProxyProperties proxyProperties=new ProxyProperties();
          我用這個(gè)對(duì)象老報(bào)錯(cuò)  回復(fù)  更多評(píng)論
            

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 来凤县| 图们市| 和顺县| 泸州市| 洪雅县| 鹰潭市| 麻栗坡县| 抚远县| 应城市| 靖西县| 新兴县| 双柏县| 札达县| 城固县| 会东县| 澄江县| 固始县| 龙泉市| 浑源县| 兰州市| 武汉市| 娱乐| 炉霍县| 黄山市| 延庆县| 建阳市| 盐津县| 江阴市| 汕尾市| 吉木乃县| 扬州市| 清镇市| 乌什县| 栾城县| 德清县| 镶黄旗| 扎鲁特旗| 定南县| 怀宁县| 乳山市| 胶州市|