欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

使用Java1.2的Authenticator類(轉(zhuǎn))

使用 Java 1.2 的 Authenticator 類 (轉(zhuǎn))[@more@]當(dāng)您用喜好的瀏覽器在網(wǎng)上沖浪時(shí),您會遇到要求代理服務(wù)器認(rèn)證或 HTTP 服務(wù)器認(rèn)證的 URL,并會出現(xiàn)您再熟悉不過的窗口要求您輸入用戶名及口令:

從瀏覽器訪問一個諸如 http://www.lombard.com/cgi-bin/Quotes/quote 這樣的 URL 不成問題,因?yàn)槟约嚎梢蕴峁┯脩裘涂诹?。但是?dāng)您試圖通過 Java 程序從與此 URL 相關(guān)的 InputStream 中讀取數(shù)據(jù)時(shí),該 Java 程序就會發(fā)出 FileNotFoundException 異常。

在 Java 1.0 或 1.1 中,您可以通過在連接時(shí)記入 (post) 適當(dāng)?shù)恼J(rèn)證字符串來避免這種情況,但這種方法僅在您事先知道該 URL 是受保護(hù)的時(shí)才奏效。(Authorization: Basic username:password,其中基本認(rèn)證域是以 base 64 編碼的。)如果您事先沒有預(yù)見到文檔是受保護(hù)的,則您甚至無法讀取文件內(nèi)容。(有關(guān)用 Java 1.1 applet 或應(yīng)用程序訪問口令保護(hù)的 URL 的解決方案,請參閱“tips/tip047/index.shtml">Java 技巧 47:再談 URL 認(rèn)證”。值得慶幸的是,Java 1.2 在 java.NET 包中添加了一個 Authenticator 類,這使得訪問口令保護(hù)的 URL 變得極為容易。

現(xiàn)在,對于 Java 1.2,您只需用 Authenticator.setDefault() 安裝一個 Authenticator。這樣,當(dāng)需要認(rèn)證時(shí),已安裝的 AuthenticatorgetPasswordAuthentication() 方法就會被調(diào)用,然后您就可以用適當(dāng)?shù)挠脩裘涂诹顏碓O(shè)置 PasswordAuthentication 實(shí)例。就這么簡單。

所需步驟如下所示。

第一步:安裝 Authenticator

Authenticator.setDefault (new MyAuthenticator ());

第二步:創(chuàng)建 Authenticator 的子類

class MyAuthenticator extends Authenticator {
 protected PasswordAuthentication getPasswordAuthentication() {
 return new PasswordAuthentication ("username", "password");
 }
}

以下程序完整地顯示了這種行為,它提供了自己的認(rèn)證提示對話框。

import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;

public class URLPassword extends Frame {

 private TextField tf = new TextField();
 private TextArea ta = new TextArea();

 public URLPassword() {

 super ("URL Password");

 // 安裝 Authenticator
 Authenticator.setDefault (new MyAuthenticator ());

 // 設(shè)置屏幕
 add (tf, BorderLayout.NORTH);
 ta.setEditable(false);
 add (ta, BorderLayout.CENTER);
 tf.addActionListener (new ActionListener() {
 public void actionPerformed (ActionEvent e) {
 String s = tf.getText();
 if (s.length() != 0)
 ta.setText (fetchURL (s));
 }
 });
 addWindowListener (new WindowAdapter() {
 public void windowClosing (WindowEvent e) {
 dispose();
 System.exit(0);
 }
 });
 }

 private String fetchURL (String urlString) {
 StringWriter sw = new StringWriter();
 PrintWriter pw = new PrintWriter(sw);

 try {
 URL url = new URL (urlString);
 InputStream content = (InputStream)url.getContent();
 BufferedReader in =
 new BufferedReader (new InputStreamReader (content));
 String line;
 while ((line = in.readLine()) != null) {
 pw.println (line);
 }
 } catch (MalformedURLException e) {
 pw.println ("Invalid URL");
 } catch (IOException e) {
 pw.println ("Error reading URL");
 }
 return sw.toString();
 }

 public static void main (String args[]) {
 Frame f = new URLPassword();
 f.setSize(300, 300);
 f.setVisible (true);
 }

 class MyAuthenticator extends Authenticator {
 protected PasswordAuthentication getPasswordAuthentication() {
 final Dialog jd = new Dialog (URLPassword.this, "Enter password", true);
 jd.setLayout (new GridLayout (0, 1));
 Label jl = new Label (getRequestingPrompt());
 jd.add (jl);
 TextField username = new TextField();
 username.setBackground (Color.lightGray);
 jd.add (username);
 TextField password = new TextField();
 password.setEchoChar ('*');
 password.setBackground (Color.lightGray);
 jd.add (password);
 Button jb = new Button ("OK");
 jd.add (jb);
 jb.addActionListener (new ActionListener() {
 public void actionPerformed (ActionEvent e) {
 jd.dispose();
 }
 });
 jd.pack();
 jd.setVisible(true);
 return new PasswordAuthentication (username.getText(), password.getText());
 }
 }
}

 后續(xù)技巧!   來自 Luis Blanco Gomez

代碼的第 85 行(MyAuthenticator 類的返回參數(shù))顯示一個錯誤:

return new PasswordAuthentication (username.getText(), password.getText());

編譯器將報(bào)錯:

URLPass.java:88: Incompatible type for constructor. Can't convert
java.lang.String to char[].
 return new PasswordAuthentication ( username.getText(), password.getText());

為修正此錯誤,您必須聲明一個 String 變量來存儲 password.getText();例如,"String pass= password.getText();",并將返回行改為:

return new PasswordAuthentication ( username.getText(), pass.toCharArray());

為了測試這個程序,必須找出一個您知道其用戶名和口令的 URL。就 DiSCOver Brokerage Direct 而言,任何人都可以在 registration desk 獲得一個免費(fèi)口令。接下來,用 URL http://www.lombard.com/cgi-bin/Quotes/quote 來測試該程序。

有幾點(diǎn)值得一提:不可信的 applet 可在 appletviewer 中安裝一個缺省的 Authenticator。HotJava、Navigator 和 Internet Explorer 會怎么做尚不清楚。如果您沒有必要的權(quán)限便試圖更改 authenticator,該程序就會發(fā)出一個 AccessControlException 異常。

提交您喜好的 Java 技巧
每篇技巧都將提供有關(guān)有用的技巧和竅門的幾則簡短信息,以幫助您改進(jìn) Java 代碼。我們將探究這一出色技術(shù)的諸多方面,每次討論一個 Java bean。

我們也希望將您的 Java 技巧刊登在以后的 Java world 上。趕快將您最棒的技巧和竅門寫出來并發(fā)送到 Mailto.cgi?javatips@javaworld.com+/javaworld/javatips/jw-javatips.index.html+javatip" name=javatip>javatips@javaworld.com。您可能會發(fā)現(xiàn)自己成了 JavaWorld 的一名作者,因?yàn)槟挠幸嫣崾究赡艹蔀橄乱黄?Java 技巧!

作者簡介
john.zukowski John Zukowski 是 MageLang Institute 的一位軟件專家,他是 Java AWTReference(O'Reilly& Associates 出版)、Borland's JBuilder: No experience required(Sybex 出版)兩本書的作者,同時(shí)也是 Mining Company 的 Focus on Java 指南的作者。

網(wǎng)頁題目:使用Java1.2的Authenticator類(轉(zhuǎn))
URL分享:http://aaarwkj.com/article34/gdidpe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號、企業(yè)建站網(wǎng)站維護(hù)、用戶體驗(yàn)、App開發(fā)、企業(yè)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名
日韩一级黄色片在线播放| 国产熟女真实乱精品视频| 国产在线精品不卡一区| 未满十八禁止在线播放| 色婷婷久久五月中文字幕| 81精品国产综合久久精品伦理| 变态另类专区一区二区三区| 日本不卡一区二区在线观看| 成人黄色三级免费网站| 草草在线成年免费视频| av中文字幕熟妇人妻少妇| 欧美性精品不卡在线观看| 少妇按摩高潮呻吟av| 欧美日韩国产这里只有精品| 国产男女免费完整视频| 黄色成人av免费看| 日本高清不卡免费在线观看视频一二三区 | 亚洲成av人在线观看福利| 国产精品重口调教系列| 不卡的国产在线视频| 国产精品一区二区熟女| 美腿丝袜清纯唯美亚洲另类| 国产91精品激烈高潮白浆| 亚洲第一女人天堂av| 国产精品日韩经典中文字幕| 成人激情电影免费在线| 极品白嫩少妇无套内谢| 欧美一区二区精品网站| 亚洲欧美一区二区色慰| 国产成人大片一区二区三区 | 久久免费看少妇高潮免费| 国产超碰久久久久久精品| 日韩伦理高清在线观看| 99热精品在线免费观看| 黑人精品少妇一区二区三区| 未满十八禁止观看免费| 国产又黄又粗的视频| 国产亚洲中文久久网久久| 亚洲成人av毛片在线观看| 国产成人av中文字暮在线| 精品人妻一区二区三区mp4|