免费观看又色又爽又黄的小说免费_美女福利视频国产片_亚洲欧美精品_美国一级大黄大色毛片

使用Java1.2的Authenticator類(轉)

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

從瀏覽器訪問一個諸如 http://www.lombard.com/cgi-bin/Quotes/quote 這樣的 URL 不成問題,因為您自己可以提供用戶名和口令。但是當您試圖通過 Java 程序從與此 URL 相關的 InputStream 中讀取數據時,該 Java 程序就會發出 FileNotFoundException 異常。

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

現在,對于 Java 1.2,您只需用 Authenticator.setDefault() 安裝一個 Authenticator。這樣,當需要認證時,已安裝的 AuthenticatorgetPasswordAuthentication() 方法就會被調用,然后您就可以用適當的用戶名和口令來設置 PasswordAuthentication 實例。就這么簡單。

所需步驟如下所示。

第一步:安裝 Authenticator

Authenticator.setDefault (new MyAuthenticator ());

第二步:創建 Authenticator 的子類

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

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

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 ());

 // 設置屏幕
 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());
 }
 }
}

 后續技巧!   來自 Luis Blanco Gomez

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

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

編譯器將報錯:

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 獲得一個免費口令。接下來,用 URL http://www.lombard.com/cgi-bin/Quotes/quote 來測試該程序。

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

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

我們也希望將您的 Java 技巧刊登在以后的 Java world 上。趕快將您最棒的技巧和竅門寫出來并發送到 Mailto.cgi?javatips@javaworld.com+/javaworld/javatips/jw-javatips.index.html+javatip" name=javatip>javatips@javaworld.com。您可能會發現自己成了 JavaWorld 的一名作者,因為您的有益提示可能成為下一篇 Java 技巧!

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

網頁題目:使用Java1.2的Authenticator類(轉)
URL分享:http://m.newbst.com/article34/gdidpe.html

成都網站建設公司_創新互聯,為您提供微信公眾號企業建站網站維護用戶體驗App開發企業網站制作

廣告

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

網站優化排名