亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

開啟Java對代理服務器和HTTP驗證的支持

2019-11-18 12:44:54
字體:
來源:轉載
供稿:網友

  編寫能夠訪問Web頁面的java應用程序是不難的,這要感謝Java核心庫對其所提供的良好支持。但是,說得更加全面一點,任何這樣的應用程序都必須支持代理服務器和HTTP驗證。幸運的是,從1.2版開始,Java就對驗證提供了本地支持。只用小小的努力,你就能給先前的版本加上類似的支持。
  
  使用代理服務器
   
  從技術上講,代理服務器只是一個接受請求并把這些請求轉發到最終目的地或者另一個代理服務器的代理程序。代理服務器的典型應用是實現緩沖和防火墻。
  
  在HTTP這一層次,一個穿過代理服務器的請求和一般的請求沒有很大的區別。一般來說,這個請求被送到代理服務器而不是真正的目的地,而且地址被完全記錄下來,以便于代理服務器能夠找到目標主機。
  
  Java以非凡的系統屬性為代理服務器提供支持。你所需要做的就是把http.PRoxyHost屬性設置到代理服務器地址,把http.proxyPort設置到代理服務器端口。例如,假如在地址proxy.mycompany.com:8132有一個代理服務器,以下這段代碼使用這個代理服務器配置了Java的HTTP協議:
  
  System.getProperties().setProperty( "http.proxyHost", "proxy.mycompany.com" );
  System.getProperties().setProperty( "http.proxyPort", "8132" );
  
  對于簡單的情況這個支持就夠了。但是有些代理,尤其是防火墻,被配置成需要驗證,以答應請求通過。在這種情況下,就必須提供驗證支持,這就引出了HTTP驗證。
  
  HTTP驗證
  HTTP協議支持對資源的保護,所以必須提供一個合適的驗證方法來訪問這些資源。當一個請求要對這樣的資源進行訪問,Web服務器會回應一個401(未經授權的)錯誤碼(見RFC2616),在這種情況下,包含了一個指定方案和域的WWW驗證報頭。
  
  這個方案定義了提供權限的方法。目前指定了兩種策略:基本的和摘要的(見RFC2617)。我會把重點放在基本策略上,因為它更普遍也更輕易實現,盡管摘要策略更加強大且提供更高的安全性。
  
  域
  域是一個定義相同主機內受保護區間(一組需要保護的資源)的任意串。單一的主機可以有多個域,相同域內的所有資源都共享相同權限——也就是說,假如對給定資源請求的權限是合法的,那么在相同的區域內,對其他資源的任何后來的請求也必須是合法的。
  
  假設你要訪問某個Web服務器上“Protected Territory”內的一個受保護資源,那么會應將包含以下報頭(假設Web服務器使用的是基本的驗證):
  
  WWW-Authenticate: Basic realm="Protected Territory"
  
  你必須重新發出請求,并包括指定了合法用戶名和密碼的驗證報頭。如何提取用戶名和密碼則是應用程序的工作了。例如瀏覽器通常使用顯示主機和域的對話框來要求輸入用戶名和密碼。
  
  驗證報頭必須以:的形式,提供所使用的驗證方案、用戶名和密碼(一個base64編碼串,見RFC2045)。所以,假如用戶名是Alladin(阿拉?。?,密碼是“open sesame(芝麻開門)”,那么要送出的報頭就應該是:
  
  Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
  
  代理服務器也是這樣的,除非代理服務器回應一個407(需要代理服務器驗證)錯誤碼和代理服務器驗證報頭,這個報頭是回應一個不包含合法權限的請求的。權限必須在請求的代理服務器驗證報頭里提供。
  
  代理服務器要在應用程序的配置里設定,用戶名和密碼也是一樣的。使用這個方法,應用程序就不用等待要求必要信息的407錯誤碼,也不用重新發送請求了。
   Java里的HTTP驗證
   
  在URLConnection類里,Java提供了實現HTTP驗證所需的一切。在對服務器的連接打開后(在調用了connect方法后),報頭可通過getHeaderField(String)方法訪問到,這個方法在給定名字時將報頭的值作為一個串返回。
  
  所以在發送一個請求后,使用getHeaderField方法就可以獲取WWW驗證報頭。假如這個方法返回的是空值,那么這個報頭就沒有被使用,這個請求不需要授權。否則就解析返回的值,獲取域,并使用這個值獲取用戶名和密碼。然后重發請求,這一次使用setRequestProperty方法設置驗證報頭。
  
  你可以不停地重復這一過程,直到授權被許可或者用戶中止了操作。你也可以保存用戶名和密碼以備以后在相同的域內為請求提供權限。根據HTTP驗證的規范,所有對相同或者更深層次的相同路徑的請求應該被認為是相同區域內的一部分。
  
  盡管標準的Java類沒有提供對base64的支持,但是要實現base63不是一件困難的事。有好幾個公開可用的工具,見Listing A。
  
  你可以以同樣的方式為代理服務器設置權限。使用setRequestProperty方法在每個請求里設置代理服務器驗證報頭就行了。
  
  要使為Java應用程序加上HTTP驗證更加輕易些,我編寫了HttpGet類(Listing B),它對代理服務器也提供了支持。完整的API見表A:
  
  表A
  開啟Java對代理服務器和HTTP驗證的支持
  最重要的方法是doGet,它對一個URL發出HTTP GET請求,返回一個連接的URLConnection對象。它使用authorize方法來取得指定域的用戶名和密碼。缺省的方法是使用一個對話框來要求輸入這個信息。假如你需要定制一個方法,只用細分HttpGet并取代authorize方法就行了。假如相同的區域要被再次訪問,權限可以被緩沖以供再次使用。
  
  Listing C是一個簡單的例子,這個例子說明了使用HttpGet類獲取指定URL(使用命令行指定)的內容并將其打印到標準輸出的過程。
  
  驗證和Java 1.2
  Java 1.2以及更高的版本以類驗證器的形式為驗證提供了本地支持。你所需要做的只是將其細分并取代getPassWordAuthentication方法。這個方法必須獲取用戶名和密碼,并將它們作為一個PasswordAuthentication對象返回。
  
  你還必須使用Authenticator.setDefault方法為你驗證器工具的實例進行注冊。完成注冊后,每當碰到受保護資源Java就會調用getPasswordAuthentication方法。
  
  這個方法的一個好處是Java會治理所有的底層細節。除此之外,驗證器不僅僅局限于HTTP驗證,還能用于其他任何協議。不足之處在于它只在Java 1.2里有。Listing D使用的是Listing C的例子,但是使用了驗證器的類。
  
  結論
  對代理服務器和HTTP驗證的支持是任何應用程序處理Web頁面時所必需的。正如我們在這里看到的,Java 1.2對這種驗證提供了本地支持,只用一點工作,你就能在任何版本的Java里加入這樣的支持。
  
  我的方法說明的只是這個過程的基本點,還有很大空間可供改善。(你可以在此找到本文所設計程序的源代碼。)例如,你也許想要增加對其他類型請求的支持,但是這個版本的只能用于GET。在今后的文章里,我會重提這個問題,并討論如何對其改進。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美整片在线观看| 国产精品视频26uuu| 免费99精品国产自在在线| 91极品视频在线| 欧美日韩国产成人高清视频| 久久免费视频在线观看| 亚洲大尺度美女在线| 亚洲一区二区久久久久久| 欧美激情一区二区三区在线视频观看| 91免费视频国产| 91国内揄拍国内精品对白| 国语自产精品视频在线看| 2019中文字幕在线| 久久综合伊人77777蜜臀| 亚洲第一视频网站| 欧美自拍视频在线| 国产亚洲精品一区二555| 日韩视频―中文字幕| 一区二区三区美女xx视频| 成人免费高清完整版在线观看| 欧美国产亚洲视频| 色婷婷综合久久久久中文字幕1| 亚洲综合日韩中文字幕v在线| 亚洲一区二区日本| 精品久久久久久亚洲精品| 欧美日韩中国免费专区在线看| 亚洲午夜未满十八勿入免费观看全集| 91av在线免费观看| 中文欧美日本在线资源| 亚洲18私人小影院| 国产精品午夜视频| 欧美成人免费在线视频| 欧美视频一二三| 欧美日韩国产成人| 久久久综合免费视频| 久久亚洲精品小早川怜子66| 在线丨暗呦小u女国产精品| 精品国产区一区二区三区在线观看| 亚洲精品美女在线观看| 欧美国产亚洲精品久久久8v| 国产日韩亚洲欧美| 久久久久久国产| 日韩av在线免费看| 欧美激情xxxx| 亚洲护士老师的毛茸茸最新章节| 国产精品高潮呻吟久久av黑人| 欧美伊久线香蕉线新在线| 精品欧美国产一区二区三区| 欧美视频专区一二在线观看| 国产精品普通话| 亚洲精品日韩激情在线电影| 中文字幕视频在线免费欧美日韩综合在线看| 国产91网红主播在线观看| 91色视频在线观看| 久久精品国产v日韩v亚洲| 色噜噜国产精品视频一区二区| 亚洲视频第一页| 在线亚洲国产精品网| 欧美综合激情网| 亚洲精品wwww| 在线成人激情视频| 国产精品久久久久久久久久| 欧美电影在线免费观看网站| 夜夜嗨av一区二区三区免费区| 8050国产精品久久久久久| 羞羞色国产精品| 91中文精品字幕在线视频| 色哟哟入口国产精品| 中文字幕久久久av一区| 日韩精品日韩在线观看| 国产精品久久久久久久久久三级| 青青草成人在线| 668精品在线视频| 亚洲va欧美va在线观看| 亚洲新中文字幕| 在线观看欧美成人| 亚洲视频网站在线观看| 亚洲女人天堂网| 日本成人在线视频网址| 亚洲国产精品久久精品怡红院| 中文字幕在线视频日韩| 亚洲高清久久网| 欧美大片第1页| 国产日韩欧美自拍| 日韩av在线一区二区| 91夜夜揉人人捏人人添红杏| 538国产精品一区二区在线| 中文字幕亚洲欧美日韩2019| 欧美一二三视频| 日韩美女视频免费看| 亚洲精品国产欧美| 亚洲性xxxx| 日韩av网站电影| 高清一区二区三区四区五区| 亚洲乱码国产乱码精品精天堂| 97香蕉超级碰碰久久免费的优势| 中文字幕日韩免费视频| 久久成年人免费电影| 日本中文字幕不卡免费| 欧美在线视频导航| 成人精品久久av网站| 亚洲精品丝袜日韩| 国产亚洲美女精品久久久| 亚洲色图美腿丝袜| 欧美精品videofree1080p| 国内精品国产三级国产在线专| 国产一区二区日韩| 欧美激情视频网| 亚洲xxxx妇黄裸体| 亚洲第一网站免费视频| 91精品国产色综合| 欧美尺度大的性做爰视频| 一本色道久久88精品综合| 欧美成人免费全部| 欧美最猛黑人xxxx黑人猛叫黄| 久久久久中文字幕| 91精品国产高清| 亚洲www永久成人夜色| 欧美大尺度电影在线观看| 欧美日韩另类在线| 国产精品va在线播放我和闺蜜| 51精品国产黑色丝袜高跟鞋| 国产精品久久久久久久久久ktv| 成人黄色网免费| 91免费高清视频| 亚洲xxxx18| 日韩精品免费一线在线观看| 国产91av在线| 日韩电影免费在线观看中文字幕| 亚洲国产古装精品网站| 欧美日韩不卡合集视频| 清纯唯美日韩制服另类| 97av在线视频免费播放| 亚洲免费视频一区二区| 欧美国产日韩一区二区在线观看| 日韩精品亚洲元码| 日韩精品中文字幕在线| 热99精品里视频精品| 国产精品中文在线| 亚洲精品乱码久久久久久金桔影视| 精品国产鲁一鲁一区二区张丽| 91久久综合亚洲鲁鲁五月天| 日韩欧美国产骚| 日韩视频第一页| 国产精品一区二区三区在线播放| 欧美另类极品videosbestfree| 久久久久国产一区二区三区| 亚洲欧美国产精品专区久久| 成人激情视频免费在线| 一区二区亚洲欧洲国产日韩| 91免费国产网站| 26uuu亚洲伊人春色| 日韩极品精品视频免费观看| 红桃av永久久久| 91精品国产99| 亚洲奶大毛多的老太婆| 亚洲一区二区久久| 国产在线观看精品一区二区三区| 欧美激情精品久久久久久免费印度| 久久777国产线看观看精品| 尤物九九久久国产精品的特点| 日本一区二区三区在线播放| 韩曰欧美视频免费观看| 亚洲国产天堂久久综合网|