隨筆 - 9  文章 - 12  trackbacks - 0
          <2007年10月>
          30123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

          常用鏈接

          留言簿(2)

          隨筆檔案

          相冊

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

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

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

          我采用的框架是axis2.


           //options用來包容客戶端的各種設置

           Options options = new Options();

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

          //設置服務端認證.  , 開始的時候沒有設host和domain,   認證通不過,  生成的http header 中也沒有認證信息.  搞了好半天才發(fā)現(xiàn)必須設置主機和域名(服務器端的)
                  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");
                  
          //必須設置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());

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

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

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

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

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

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

          <!--
          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>

          說明: <url-pattern>/members/*</url-pattern> 指定受保護的資源的url pattern

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


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

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

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


          網(wǎng)站導航:
           
          主站蜘蛛池模板: 汕头市| 石棉县| 绥芬河市| 保亭| 新乡县| 宁波市| 高雄县| 漳浦县| 新化县| 沙湾县| 贡嘎县| 张家口市| 平远县| 海晏县| 汉阴县| 嘉义县| 葵青区| 阳城县| 宣城市| 锡林浩特市| 龙井市| 巢湖市| 和顺县| 甘孜县| 奉新县| 大厂| 章丘市| 两当县| 平潭县| 尖扎县| 泗阳县| 洪雅县| 多伦县| 谷城县| 黄陵县| 临泽县| 湾仔区| 土默特右旗| 黄山市| 石狮市| 右玉县|